什麼是遞迴演算法?
-- 函式自己呼叫自己本身
-- 本質上return返回的時候,總是把乙個引數傳入到自己函式本身,讓函式反覆呼叫下去
遞迴有何特點?
-- 必有乙個結束條件
沒有結束條件,遞迴就沒有任何意義,python中預設只能999層遞迴
遞迴過多棧溢位,報錯
-- 效率不高
相對而言,對於正向遞迴,遞迴次數和迴圈次數一致,沒有區別
對於逆向遞迴,要遞迴到最後才能得到確定的值,然後從最底層返回
一次是遞迴到結束值,一次從結束值返回到初始值
--如何正向遞迴實現斐波那契數列?
#!/usr/bin/python3__author__ = 'beimenchuixue'
__blog__ = ''
list_fab = [1, 1] # 定義接收值的列表
def fab(u, n_1, n_2): # u表示獲取幾個fab值
n_3 = n_1 + n_2 # n_3 每次都等於前面兩個數之和
print(n_1, n_2, n_3) # 列印每次遞迴這3個值
if u == 1: # 設定結束條件,把列表返回回去,本質上也是遞迴深度
return n_3 # 返回最後乙個值
return fab(u-1, n_2, n_3) # 本質上還是實現了往後移一位,遞迴深度為u
if __name__ == '__main__':
result = fab(10, 1, 1) # 傳入初始值
print(result) # 本質上就包含初始值1,1 ,list_fab中有u+2個值,但是新增進去只有u個值
print(list_fab) # 列印結果
如何逆向遞迴實現斐波那契數列?
#!/usr/bin/python3__author__ = 'beimenchuixue'
__blog__ = ''
list_fab = # 定義接收值的列表
def fab(n_3, n_2):
n_1 = n_3 - n_2 # n_1 每次都等於 n_3 - n_2
print(n_1, n_2, n_3) # 列印每次遞迴這3個值
list_fab.insert(0, n_1) # 把每次遞迴得到的n_1值新增列表中最前面
if n_1 == 1: # 設定遞迴結束返回條件
return 1 # 返回最後乙個值
return fab(n_2, n_1) # 本質上實現了 n_2 = n_3 , n_1 = n_2,逆向移動了一位
if __name__ == '__main__':
result = fab(144, 89) # 傳入初始值
print(result) # 列印遞迴最後返回的引數
print(list_fab)
遞迴 斐波那契
題 若一頭小母牛,從出生起第四個年頭開始每年生一頭母牛,按此規律,第n年有多少頭母牛?具體分析 1 分析題目 從出生起第四個年頭開始每年生一頭母牛 時間 年 未成熟母牛 頭 成熟母牛 頭 母牛總數 頭 1 1 0 1 2 1 0 1 3 1 0 1 4 0 1 1 5 1 1 2 6 2 1 3 7...
斐波那契遞迴
const fib1 n if n 0 else if n 1 else console.log fib1 5 函式呼叫順序 fib1 5 fib1 4 fib1 3 fib1 2 fib1 1 fib1 0 fib1 1 fib1 2 fib1 1 fib1 0 fib1 3 fib1 2 fib...
遞迴優化 斐波那契
f n f n 1 f n 2 1,2,3,5,8.自頂向下使用的遞迴層次比較多,在n取值較大的情況下,效率很低 時間維度 所以可以使用陣列來替換多重遞迴呼叫,即以空間來置換時間 intersting include include include include include include d...