开发者社区> 问答> 正文

C语言用递推和递归两种算法完成斐波那契数列的计算,给一下代码

搞不懂递推和递归究竟有什么区别T T顺便解释一下吧~~

展开
收起
知与谁同 2018-07-15 20:30:09 2760 0
3 条回答
写回答
取消 提交回答
  • #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    void main()
    {
    clock_t start, finish;
    double duration=0;
    int n;
    printf ("input the data n=:");
    scanf ("%d",&n);
    start = clock();
    fib(n);
    finish = clock();
    duration = (double)(finish - start) / CLOCKS_PER_SEC;
    printf( "递归法用时=%f seconds\n", duration );
    start = clock();
    fic(n);
    finish = clock();
    duration = (double)(finish - start) / CLOCKS_PER_SEC;
    printf( "递推法用时=%f seconds\n", duration );
    }
    //递归法
    int fib(int n)
    {
    if( n == 1 || n == 2) return 1;
    else return fib(n-1)+fib(n-2);
    }
    //递推法
    int fic (int n)
    {
    int f0=1,f1=1,f2,i=2;
    if (n<2)
    return(n);
    while (i<=n)
    {
    f2=f1+f0;
    f0=f1,f1=f2;
    i++;
    }
    return f2;
    }
    此段程序将递归法和递推法计算斐波拉契函数的时间详细计算出,可以比较两个算法的时间复杂性。显然此处递推比递归算法要好得多。
    递推就是从前往后推,递归还有个回溯的过程,通过调用自身函数完成计算。
    2019-07-17 22:55:01
    赞同 展开评论 打赏
  • n==2呢。。
    2019-07-17 22:55:01
    赞同 展开评论 打赏
  • 云栖社区聚能聊、问答管理员~发福利、搞怪,八卦我来,论技术、发话题、写博客你上!
    //递归,就是函数自己调用自己
    #include <stdio.h>
    int feibonaqie(int n)
    {
    if(n == 0 )
    return 0;
    if(n == 1)
    return 1;
    else
    return feibonaqie(n-1) + feibonaqie(n-2);
    }
    int main(void)
    {
    int n = 20 ;//假设输出20个数吧
    int i;
    for(i = 0; i <= n; i++)
    printf("%d ",feibonaqie(i));
    }
    2019-07-17 22:55:01
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载