遞迴函式與fibonacci

2022-06-26 22:12:26 字數 1880 閱讀 4045

1

deff(n):

2if n == 1:

3return 1

4return n * f(n-1)

5print(f(5))

結果為:120 即5的階乘

通過這個例子來看遞迴函式有著兩個特點

(1)呼叫自己

(2)結束條件(在賦值最後一項的時候同時shutdown)

fibonacci數列形式 0 1 1 2 3 5 8 13 21 34.。。。

1

deffibo(n):

2if n <= 1:

3returnn4

return fibo(n-1)+fibo(n-2)

5print(fibo(5))

這裡的數列是從第0項開始算的,所以第五項是5

1 a =0

2 b = 1

3for i in range(8):

4 b,a = a+b,b 5#

c = b 6#

b =a +b7#

a = c

8print(b)

上述**中的

b,a = a+b,b 

不是在先賦值b再賦值a的意思而是轉換過程相當於注釋中的內容。

遞迴函式相當於1000輛車在高速上堵車,第一輛車在拋錨的時候必須等到第一千輛車停止才會修好。而結果出來的時候相當於第一千輛車在此啟動的時候。

3.重要的內建函式

3.1filter

1 a = ["

d","

dd","s"

]2deff(s):

3if s != "s"

:4return

s5 ret =filter(f,a)

6print(ret)

結果為

1

2 ['

d', '

dd']

可以看到返回值為乙個filter object的型別,是乙個可迭代器,顯示需要轉換型別或者遍歷。

3.2map

1 a = ["

d","

dd","s"

]2deff2(s):

3return s + "

gagaga

"4 ret2 =map(f2,a)

5print

(ret2)

6print(list(ret2))

結果為

[

'dgagaga

', '

ddgagaga

', '

sgagaga

']

3.3reduce

1

from functools import

reduce

2def

ji(x,y):

3return x +y

4print(reduce(ji,range(1,101)))

結果5050 實現的結果是前100項的和。注意這裡reduce返回的值是乙個數。運算模式相當於將前兩個數處理結果和下乙個數處理。

3.4lambda

1

print(list(map(lambda x:x*x,[1,2,3,4])))

結果為[1,4,9,16]

lambda是乙個匿名函式,即沒有名字。存在的意義在你想做一件很簡單的操作但是用函式太麻煩,就利用lambda做成一行避免汙染記憶體。

1 a = lambda x,y:x*y

2print(a(2,3))

此段**明顯地表明了lambda是乙個函式

Fibonacci數列的遞迴與非遞迴實現

fibonacci 斐波那契 數列定義 1 遞迴實現 思想簡單,無需贅述,實現如下 遞迴方法複雜度o 2 n 計算到n 41已達到計算機的極限 int f int n int fibonacci1 int len 該方法存在很多重複計算,雖然是典型的遞迴,但效率很低,資源消耗大。經分析,改演算法時間...

Fibonacci數列的遞迴與非遞迴實現演算法詳解

遞迴演算法 因為遞迴需要不斷的呼叫自身,當n過大的時候,程式將會很慢效率不高,不推薦使用,關於遞迴實現演算法,也很簡單,很多教科書上都是這種解法。遞迴演算法 long long fibonacci unsigned int n 非遞迴演算法 我主要講述一下非遞迴演算法的實現,非遞迴演算法是比較實用的...

Fibonacci數列 遞推 遞迴

無窮數列1,1,2,3,5,8,13,21,34,55,稱為fibonacci數列。它可以遞迴地定義為 第n個fibonacci數可遞迴地計算如下 int fibonacci int n 編寫完整的主函式,分別記錄利用上述遞迴函式求第45,46,47,48個fibonacci數所花費的時間。程式 p...