题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少对?
数学分析:兔子的规律为数列1,1,2,3,5,8,13,21....
可以使用数列归纳这个问题,
前两项为 a1=a2=1;后面的项规律为 an=an-1+an-2.
递归:
python里面也可以使用递归函数,所谓递归函数就是利用函数本身调用自身,然后一直不停地调用自身,达到合适的条件,然后返回计算后的值。
例如:#计算5的以内的加法
def add(j):
if j==0:
return 0
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,这一样的道理