神奇的斐波那契数列

斐波那契数列

1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 89 , 144 , 233 , 377 , . . . 1,1,2,3,5,8,13,21,34,55,89,144,233,377,... 1,1,2,3,5,8,13,21,34,55,89,144,233,377,...

这是斐波那契数列,通常用 F n F_n Fn表示它的第 n n n

斐波那契数列是由意大利的一位奆佬数学家列奥纳多·斐波那契发现的。这位奆佬在研究兔子繁殖时发现了这样一个数列,故斐波那契数列又称"兔子数列"

斐波那契数列有一个简单又深奥的规律: F n + 1 = F n + F n − 1 F_{n+1}=F_n+F_{n-1} Fn+1=Fn+Fn1,递推形成。也就是,斐波那契数列每一项都是前两项之和。

如果将递推公式转化成通项公式的话,是一个很复杂的式子:

F n = 1 5 [ ( 1 + 5 2 ) n − ( 1 − 5 2 ) n ] F_n=\dfrac1{\sqrt5}[(\dfrac{1+\sqrt5}2)^n-(\dfrac{1-\sqrt5}2)^n] Fn=5 1[(21+5 )n(215 )n]

我:这是什么鬼?

由于这个通项公式太过复杂,所以一般在求斐波那契数列时还是用递推公式。

下面为标准求 F n F_n Fn的代码,时间复杂度 O ( N ) O(N) O(N)

unsigned Fibonacci(int n)
{
   
	if(n==1) return 1;
	if(n==2) return 1;
	if(f[n-1]>0&&f[n-2]>0)
	{
   
		return f[n-1]+f[n-2];
	}
	else
	{
   
		f[n-1]=Fibonacci(n-1);
		f[n-2]=Fibonacci(n-2);
		return f[n-1]+f[n-2];
	}
}

由于斐波那契增长速度很快,前 50 50 50项已经无法用int放下,而前 100 100 100项就需要高精度。

斐波那契数列的性质

斐波那契数列的最大的性质就是满足 F n + 1 = F n + F n − 1 F_{n+1}=F_n+F_{n-1} Fn+1=Fn+Fn1

由这个性质,可以推出许多有意思的性质

假设 F m = a , F m + 1 = b F_m=a,F_{m+1}=b Fm=a,Fm+1=b,根据上述式子, F m + 2 = a + b , F m + 3 = a + 2 b , F m + 4 = 2 a + 3 b , . . . F_{m+2}=a+b,F_{m+3}=a+2b,F_{m+4}=2a+3b,... Fm+2=a+b,Fm+3=a+2b,Fm+4=2a+3b,...

列出一张表格,表示 F m + k F_{m+k} Fm+k中含有多少个 a a a b b b

m m + 1 m + 2 m + 3 m + 4 m + 5 m + 6 m + 7 m + 8 . . . a 1 0 1 1 2 3 5 8 13 . . . b 0 1 1 2 3 5 8 13 21 . . . \begin{matrix}& m&m+1&m+2&m+3&m+4&m+5&m+6&m+7&m+8&... \\ a&1&0&1&1&2&3&5&8&13&...\\ b&0&1&1&2&3&5&8&13&21&... \end{matrix} abm10m+101m+211m+312m+42

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值