1deff(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.。。。
1deffibo(n):
2if n <= 1:
3returnn4
return fibo(n-1)+fibo(n-2)
5print(fibo(5))
這裡的數列是從第0項開始算的,所以第五項是5
1 a =02 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)
結果為
12 ['
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
1from functools import
reduce
2def
ji(x,y):
3return x +y
4print(reduce(ji,range(1,101)))
結果5050 實現的結果是前100項的和。注意這裡reduce返回的值是乙個數。運算模式相當於將前兩個數處理結果和下乙個數處理。
3.4lambda
1print(list(map(lambda x:x*x,[1,2,3,4])))
結果為[1,4,9,16]
lambda是乙個匿名函式,即沒有名字。存在的意義在你想做一件很簡單的操作但是用函式太麻煩,就利用lambda做成一行避免汙染記憶體。
1 a = lambda x,y:x*y2print(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...