每日一算法:Fibonacci数列

举报
悦来客栈的老板 发表于 2020/12/30 00:47:47 2020/12/30
【摘要】 Fibonacci为1200年代的欧洲数学家,在他的着作中曾经提到:「若有一只免子每个月生一只小免子,一个月后小免子也开始生产。起初只有一只免子,一个月后就有两只免子,二个月后有三只免子,三个月后有五只免子(小免子投入生产)......。 如果不太理解这个例子的话,举个图就知道了,注意新生的小免子需一个月成长期才会投入生产,类似的道理也可以用于植物的生长,这就是Fibona...

Fibonacci1200年代的欧洲数学家,在他的着作中曾经提到:「若有一只免子每个月生一只小免子,一个月后小免子也开始生产。起初只有一只免子,一个月后就有两只免子,二个月后有三只免子,三个月后有五只免子(小免子投入生产)......

如果不太理解这个例子的话,举个图就知道了,注意新生的小免子需一个月成长期才会投入生产,类似的道理也可以用于植物的生长,这就是Fibonacci数列,一般习惯称之为费氏数列,例如以下: 11 23581321345589......

 

/*递归算法一*/


  
  1. #include <stdio.h>
  2. int Fibonacci(int n)
  3. {
  4. if (n == 1 || n == 2)
  5. {
  6. return 1;
  7. }
  8. else
  9. {
  10. return Fibonacci(n-1) + Fibonacci(n-2);
  11. }
  12. }
  13. int main()
  14. {
  15. int n;
  16. scanf("%d",&n);
  17. printf("%d\n",Fibonacci(n));
  18. return 0;
  19. }


/*递归算法二*/


  
  1. #include <stdio.h>
  2. #define N 40
  3. int main()
  4. {
  5. int Fib[N] = {0};
  6. int i;
  7. Fib[0] = Fib[1] = 1;
  8. for (i=2; i<N; i++)
  9. {
  10. Fib[i] = Fib[i-1] + Fib[i-2];
  11. }
  12. for (i=0; i<N; i++)
  13. {
  14. printf("%d\t",Fib[i]);
  15. }
  16. printf("\n");
  17. return 0;
  18. }


/*迭代算法*/


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int n;
  5. int i;
  6. int Fib1 = 1;
  7. int Fib2 = 1;
  8. int Fib = 1;
  9. scanf("%d",&n);
  10. for (i = 2; i<n; i++)
  11. {
  12. Fib = Fib1 + Fib2;
  13. Fib1 = Fib2;
  14. Fib2 = Fib;
  15. }
  16. printf("%d\n",Fib);
  17. return 0;
  18. }

文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq523176585/article/details/14522279

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。