斐波那契数列
三岁学编程:最白话的语言带领学习编程,都是小白,一起努力
戏说斐波那契(兔子数列)
斐波那契数列又因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”。
一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?
解析兔子:
第一个月小兔子没有繁殖能力,所以还是一对
两个月后,生下一对小兔对数共有两对
三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对
------
依次类推可以列出下表:
月份: 1 2 3 4 5 6 7 8 9 10 11 12
兔子数: 1 1 2 3 5 8 13 21 34 55 89 144
兔子的个数就是所谓的斐波那契数列
定义
一个数列从第3项开始,每一项都等于前两项之和时就称这个数列为斐波那契数列。
方法一:for循环(迭代)
递增计算,利用for循环逐个相加得到结果
def fibon_1(n): #设置函数fibon_1函数
a = 0
b = 1
for i in range(n+1):
a , b = b, a+b
return a
fac = int(input("输入需要的位数:"))
for i in range(fac):
print(fibon_1(i),end=' ')
结果:
输入需要的位数: 5
1 1 2 3 5
方法二:递归
斐波那契数列为经典的递归公示:
这里可以采用递归的方法获取
def fibon_2(n):
if n <= 1:
return n
elif n > 1:
return fibon_2(n-1)+fibon_2(n-2) #采用递归方式
fac = int(input("输入需要的位数:"))
for i in range(1,fac+1):
print(fibon_2(i),end=' ')
结果
输入需要的位数:5
1 1 2 3 5
方法三:生成器
采用生成器
def fb_3():
a,b = 0,1
while True:
yield a
a , b = b , a+b
g = int(input('需要获取斐波那契数列的多少位'))
for i in fb_3:
print(i):
n = n+1
if n == g:
break
也可以用一下方式获取1000一下的值
a=0
b=1
while b < 1000:
print(b,end=',')#end 可以将print输出到同一行并以 ,号结尾
a, b = b, a+b
结果
1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,
该代码简单但不是很完整还需要一定的改正
C语言实现:
#include<stdio.h>
main(){
int fibonacci[20],i,j;
fibonacci[0]=0;
fibonacci[1]=1;
for(i=2;i<20;i++){
fibonacci[i]=fibonacci[i-2]+fibonacci[i-1];
}
for(j=0;j<20;j++){
printf("%-6d ",fibonacci[j]);
if((j+1)%5==0){
printf("\n");
}
}
}
还有其他的方式可以进一步编写不过三岁水平有限还希望大家多多指导!