題目:古典問題:有一對兔子,從出生後第3個月起每一個月都生一對兔子,小兔子長到第三個月後每一個月又生一對兔子,假如兔子都不死,問每一個月的兔子總數爲多少對?python
數學分析:兔子的規律爲數列1,1,2,3,5,8,13,21....算法
能夠使用數列概括這個問題,函數
前兩項爲 a1=a2=1 ;後面的項規律爲 an=an-1+an-2.spa
遞歸:設計
python裏面也能夠使用遞歸函數,所謂遞歸函數就是利用函數自己調用自身,而後一直不停地調用自身,達到合適的條件,而後返回計算後的值。遞歸
例如:#計算5的之內的加法utf-8
def add(j):數學
if j==0:coding
return 0yield
return j+add(j-1)
print(add(5))
#15 ,以上過程就是計算0+1+2+3+4+5
在這個過程當中,add()函數自己調用了自身的函數return j+add(j-1),這樣子一次又一次調用,最後直到 j==0,結束遞歸。上面的這個過程就叫作遞歸。
代碼實現:
第一種解決方法,按照數學思惟去設計算法:
第二種解決方法,斐波那契數列:
# _*_ coding:utf-8 _*_
def fab(max):
n, a, b = 0, 0, 1
while n < max:
print b , a, b = b, a + b
n = n + 1
fab(8)
斐波那契而數列升級版:
# _*_ coding:utf-8 _*_
def fab(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
for i in fab(6):
print i
def fibo(n):
if n<=1:
return n
else:
return(fibo(n-1)+fibo(n-2))
print(fibo(8))
注意語句:
若是一個賦值語句中,要賦的值是一個表達式,那麼表達式優先於賦值執行: a=0 b=1 a, b = b, a+b 在賦值的時候,先執行右邊,這時候b =1 a=0 那麼 a, b = b, a+b 就是:a,b=1,0+1 賦值完的結果就是 :a=1,b=1 說簡單點,就像c=3+4,那麼是否是先要等右邊表達式:3+4=7執行完,再把7賦值給c,這同樣的道理