两种方法计算斐波那契数列第n项
百度斐波那契数列定义:
斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1) F(n - 2)(n ≥ 2,n ∈ N*)
方法一:递归
思路:创建一个计算第n项斐波那契数的函数,通过不断调用此函数计算(n-1),(n-2),(n-3)....2然后一次返回到第n向。下面展示代码:
-
-
-
int Fib(int n)
-
{
-
if (n <= 2)
-
return 1;
-
else
-
return Fib(n - 1) Fib(n - 2); //递归计算(n-1),(n-2)项
-
}
-
int main()
-
{
-
int n = 0;
-
printf("请输入想要计算的第几项:>");
-
scanf("%d", &n);
-
int ret = Fib(n); //创建Fib()函数并用变量ret接收返回值
-
printf("%d", ret);
-
return 0;
-
}
运行效果:
这里我们计算第10项的值,那么我们计算第50项值呢?
这并不是程序崩溃的原因,这是电脑还在计算,那么为什么计算第50项所耗时间这么久呢?
这里我们画了一个简图描述这个算法,我们计算第50项的话,要不断重复计算第3项,第4项......第48项,且项数越小被计算次数越多。所以这种算法不建议计算较大的数值!!!
方法二:迭代
思路:通过循环(n-2) (n-1)=(n)(n>2)这个表达式计算第n项数值,每循环一次赋值一次如(n-2)->(n-1),(n-1)->(n)然后在计算下一项。下面展示代码:
-
-
-
int Fib(int n)
-
{
-
int a = 1;
-
int b = 1;
-
int sum = 0;
-
if (n <= 2)
-
return 1;
-
else
-
{
-
while (n > 2)
-
{
-
sum = a b;
-
a = b;
-
b = sum;
-
n--;
-
}
-
return sum;
-
}
-
}
-
int main()
-
{
-
int count = 0;
-
int n = 0;
-
printf("请输入想要计算的第几项:>");
-
scanf("%d", &n);
-
int ret = Fib(n); //创建Fib()函数并用变量ret接收返回值
-
printf("%d", ret);
-
return 0;
-
}
运行效果:
这种方法并不会重复计算某一项的值,所有算法耗时少,效率高。
总结:
在我们写代码的过程中,递归递归固然能简化代码步骤,但有时候也不一定很合适,所有我们要选择写代码要选择最优的算法去解决问题。如果这篇文章有帮助到大家请大家动动小手点个赞加个关注吧,如果还要不足请大家评论区指出我会改正进步,谢谢大家阅读!
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgccagf
系列文章
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01