一个格子棋盘,第一个格子放一颗米,第二个格子放两个米,第三个格子是第一个和第二个格子米粒数的和,第四个格子是第二个和第三个格子米粒数的和,然后依次类推。求出,第N个格子有多少课米粒。
棋盘上大致就是
第一格:1
第二格:2
第三格:1+2 =3
第四格:2+3 =5
第五格:3+5 =8 ...
前两格设定初始值 1 和 2
然后我们定义一个 a和b ,代指上面等号右侧的两个数字,
即第三格 1+2 改成a+b=3 ,此时a=1,b=2
第四格 2+3=5,a =2 b =3,此时2是上一行的b,3是上一行a+b的结果,所以我们利用python写成 a , b = b ,a + b,
等号右侧可以看成把第三格的b赋值给了第四格的a,把第三格的结果3(a+b得到),赋值给了第四格的b。
绿色赋值给了绿色,红色赋值给了红色
如果我们统计第四格的米粒数,那么就是a+b的值,或者得到刚被a+b赋值的变量b(等号左侧),即绿色的b
下面代码
1.max参数是用户想要统计第几格有多少米粒
2.不停循环执行 a,b = b,a+b ,直至 n = 等于max,就是我们想要统计第max格米粒数
3.为什么第一格是1,第二格是2,因为这是数学假设,你也可以假定第一格是2,第二格是1.所以当0<max<3时,需要单独统计。
In [13]: def fib(max):
...: n,a,b =1,0,1...: if 0 < max <3:
...: return max
...: elif max>= 3:
...: while n<=max:
...: a,b = b,a+b
...: n +=1
...: return b
...: else:
...: return "argument error"
In [24]: fib(5)
Out[24]: 8
In [25]: fib(2)
Out[25]: 2
In [26]: fib(0)
Out[26]: 'argument error'