如果我們需要重複地多次計算相同的問題,則通常可以選擇用遞迴或者迴圈兩種不同的方法。
1) 求斐波那契數列的第n項
f (n
)=
0 &n=0 \\ 1&n=1 \\ f(n-1)+f(n-2)& n>1 \end\right.
f(n)=⎩
⎨⎧0
1f(n
−1)+
f(n−
2)n
=0n=
1n>1
2) 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法(先後次序不同算不同的結果)。
解法:當使用遞迴時,如果計算的子問題有許多重複計算,此時記憶體會溢位,所以要選擇使用迴圈的方法。
'''用兩個引數分別表示f(n-1),f(n),不算更新並迴圈計算'''
# -*- coding:utf-8 -*-
class
solution
:def
fibonacci
(self, n)
:# write code here
if n<0:
return
if n<2:
return n
fibone=
0 fibtwo=
1for i in
range(2
,n+1):
b=fibtwo
fibtwo=fibone+fibtwo
fibone=b
return fibtwo
乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法(先後次序不同算不同的結果)。
這實際也就是斐波那契數列的求解問題。
資料結構 遞迴與迴圈
需要重複多次計算相同的問題,通常可以選擇用遞迴或者迴圈兩種不同的方法,遞迴是在函式內部用函式自身,迴圈則是通過設定計算的初始值及終止條件,在乙個範圍內重複運算。通常遞迴會比迴圈 簡潔,更加容易實現。遞迴也有著顯著的缺點 1.遞迴由於是函式呼叫自身,而函式呼叫是有時間和空間的消耗 每一次函式呼叫都需要...
資料結構和演算法之遞迴
遞迴問題 方法自己呼叫自己,每次呼叫傳入不同的值 public class recursiontest public static void test int n system.out.println n n public class recursiontest02 public static in...
資料結構之遞迴
本篇是資料結構與演算法之美學習筆記 遞迴在電腦科學中指一種通過將重複問題分解為同列子問題來解決問題的方法。遞迴是一種常見的演算法或者程式設計技巧。很多資料結構和演算法的編碼實現都會使用到遞迴,比附dfs深度搜尋,前中後序二叉樹遍歷等等。遞迴需要滿足三個條件 1.乙個問題的解可以分成幾個解。子問題就是...