题目:古典问题:有一对兔子,从出生后第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,这同样的道理