python 遞迴 斐波那契

2022-05-17 06:16:25 字數 1725 閱讀 2479

什麼是遞迴演算法?

-- 函式自己呼叫自己本身

-- 本質上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...