(Python初学练习)斐波那契

斐波那契

又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”.
斐波那契数列的特点是:从第三项开始,每一项都为前两项之和。 

(Python初学练习)斐波那契_第1张图片

问题:
计算二十个月以后兔子的数量?

思路:首先明确了它的特点 "从第三项开始,每一项都为前两项之和 "
这样就说明了,除了第一第二列,剩下的都可以套用循环.
我们可以创建一个列表,里面写入第一列第二列不在循环中的数据.
alist = [1,1]
下面用循环 ,但是这里要记得,要求的是二十个月的数量,如果循环二十次,那就出错了,因为刚才说了第三项开始,每一项才是前两项之和,而且刚才已经把第一个月第二个月的数据写入了列表中所以循环次数为20 - 2 = 18

代码如下:

alist = [1,1] # 第一个月第二个月的数据
for i in range(18): # 循环 18次(循环十八次的原因是因为一共需要20个月,但是已经给出前两个月的值了,所有只需要循环剩下的十八次就OK)
b = alist[-1] + alist[-2] # 用变量b存放列表最后两项之和
alist.append(b) # 然后把b的值用append放到列表最后一位 这样就满足了条件每一项都为前两项之和

print(alist[-1]) #输出最后一个月的兔子数量

for i in range(18):
    b = alist[-1] + alist[-2]
    alist.append(b)
  
print(alist[-1])


输出结果:6765



如果要看清每一列的数据,把print放在for循环中输出
```alist = [1,1]
for i in range(18):
   alist.append( alist[-1] + alist[-2])
   print(alist[-1])


输出结果    
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765




方法二:
使用数值转换的方法
z = [1,1]
a,b = 1,1                   #定义两个值
for i in range(18):      #循环 18次(循环十八次的原因是因为一共需要20个月,但是已经给出前两个月的值了,所有只需要循环剩下的十八次就OK)
    a,b = b , a + b  # 用数值转换的方式完成要求: 每一项都为前两项之和
    z.append(b)      # 然后再把相加的值添加到列表末尾
print(z[-1])

你可能感兴趣的:(Python初级)