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这里已经完整的说明了斐波那契数列的两种思想!!!





  • 相关阅读:
    Linux(CentOS)下安装OMNet++
    Linux(CentOS)安装JDK
    给电脑安装Linux系统(CentOS)
    OmNet++遇到的问题
    数论倒数总结
    [AHOI2007]密码箱
    [AHOI2005]约数研究
    Spark scala groupBy后求和
    Scala Seq创建简单的Spark DataFrame
    Spark DataFrame分组后选取第一行
  • 原文地址:https://www.cnblogs.com/Bob-tong/p/6644551.html
Copyright © 2011-2022 走看看