zoukankan      html  css  js  c++  java
  • C语言---斐波那契问题

      最近学习了一个叫递归的概念,里面最著名的一个例子就是斐波那契问题,觉得很有意思,就来实现一下:
    什么是斐波那契数列
      斐波那契数列,又称黄金分割数列,值得这样一个数列:0、1、1、3、5、8、13、21、34、……在数学上,斐波那契数列以如下形式递归方法定义:

      这是一个线性递推数列。

    递归实现方式:
    Demo:

    1. #include <stdio.h>
    2. //recursive fibonacci
    3. int rec_fibo(int n)
    4. {
    5. if(n == 1 || n == 2)
    6. return 1;
    7. if(n > 2)
    8. return (rec_fibo(n - 2) + rec_fibo(n - 1));
    9. }
    10. int main(void)
    11. {
    12. int n = 0;
    13. //提醒user输入
    14. printf("please input you want to test number: ");
    15. scanf("%d", &n);
    16. int fi_num = 0;
    17. //调用rec_fibo()函数
    18. fi_num = rec_fibo(n);
    19. //向屏幕输出
    20. printf("F[%d] = %d ", n, fi_num);
    21. return 0;
    22. }

    非递归实现方式:
    Demo:

    1. //fibonacci non-recursive implementation
    2. int non_rec_fibo(int n)
    3. {
    4. //定义一个临时储存数组来存储
    5. int temp[2];
    6. //分别给0,1下标的数组赋初值
    7. temp[0] = 1;
    8. temp[1] = 1;
    9. int i = 0;
    10. if(n == 1 || n == 2)
    11. return 1;
    12. else
    13. {
    14. for(i = 2; i < n; i++)
    15. {
    16. //进行数组内部的数据转换
    17. int tp = temp[0] + temp[1];
    18. temp[1] = temp[0];
    19. temp[0] = tp;
    20. }
    21. return temp[0];
    22. }
    23. }
    24. int main(void)
    25. {
    26. int n = 0;
    27. printf("please input you want to test number: ");
    28. scanf("%d", &n);
    29. int fi_num = 0;
    30. fi_num = non_rec_fibo(n);
    31. printf("F[%d] = %d ", n, fi_num);
    32. return 0;
    33. }

      ok这里已经完整的说明了斐波那契数列的两种思想!!!





  • 相关阅读:
    【osd】OSD的状态转化
    【monitor】paxos算法
    【osd】Ceph中的数据一致性
    【osd】peering基本概念
    【osd】PG的生成过程
    【osd】ceph读写流程
    【osd】peering 运行过程 举例阐述
    【osd】BACKOFF
    【vscode】快捷键
    python写文件,过滤空行,根据某一行打上标记
  • 原文地址:https://www.cnblogs.com/Bob-tong/p/6644551.html
Copyright © 2011-2022 走看看