极客 - 博文3 - 菲波那切数列之递归改进版

来源:互联网 发布:samba windows 无权限 编辑:程序博客网 时间:2024/06/15 10:30
/* *文件名称:  斐波那契数列数组实现改进版 *作者: 田鑫 *完成日期: 2016 - 09 - 03 *版本号: v2.0 *实现思路: 利用数组来装中间已经计算过的值 那么如果下次计算到前次计算过的值就可以直接 返回之前计算过的值,不然的话就计算后返回值 */  /*代码实现*/  #include <stdio.h>    long feibo(int n); /*函数声明*/  void iniData(int n); /*声明初始化函数*/    long a[21]; /*因为要保留上一次计算的值,所以声明为全局变量*/    int main(void)  {      int n = 0;      int i;            iniData(20); /*对数组进行初始化*/            for(i = 1; i <= 20; i++)      {          printf("%8d", feibo(i)); /*将i的值传入, 并将返回值最为参数输出*/                    if(i % 10 == 0)              printf("\n");      }         return 0;  }  long feibo(int n)  {         if (a[n] != -1) /*如果数组值不为-1,则存储有上一次计算的值, 直接返回*/          return a[n];      if (n ==1 || n == 0)          return n;        a[n] = feibo(n - 1) + feibo(n - 2);/*数组等于-1,则没有计算过, 计算以后返回即可*/      return a[n];  }  void iniData(int n)  {      int i;            for(i = 0; i <= n; i++)          a[i] = -1;  }  /*易错提示: 将返回值类型作为long是为了避免数据溢出, 也可声明为double类型 如果声明为 int 类型的话数据容易溢出*/  

/*运行结果*/


1 0
原创粉丝点击