C语言编程:用递归和非递归法输出斐波那契数列

已知斐波那契数列第n项的计算公式如下。在计算时有两种算法:递归和非递归,通过输出数列前40项,体会两种方法的差异。当n=0时,Fib(n)=0;当n=1时,Fib(n)=... 已知斐波那契数列第n项的计算公式如下。在计算时有两种算法:递归和非递归,通过输出数列前40项,体会两种方法的差异。
当n=0时,Fib(n)=0;当n=1时,Fib(n)=1;当n>1时,Fib(n)= Fib(n-1)+ Fib(n-2).
试过了,很多语法错误啊,能帮忙再改改吗?
展开
 我来答
甄喜欢你
推荐于2018-02-19 · TA获得超过182个赞
知道小有建树答主
回答量:216
采纳率:0%
帮助的人:188万
展开全部

你用的什么编译器 我用VC++6.0完全正常 我给你贴图

循环版&nbsp 

=========================================&nbsp 

#include&nbsp&nbsp;&nbsp&nbsp;<stdio.h>&nbsp&nbsp;

int&nbsp&nbsp;&nbsp&nbsp;main()&nbsp&nbsp;

{&nbsp&nbsp;

&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;unsigned&nbsp&nbsp;&nbsp&nbsp;int&nbsp&nbsp;&nbsp&nbsp;a[40]&nbsp&nbsp;&nbsp&nbsp;=&nbsp&nbsp;&nbsp&nbsp;{0,&nbsp&nbsp;&nbsp&nbsp;1};&nbsp&nbsp;

&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;printf&nbsp&nbsp;&nbsp&nbsp;("%d\n%d\n",&nbsp&nbsp;&nbsp&nbsp;a[0],&nbsp&nbsp;&nbsp&nbsp;a[1]);&nbsp&nbsp;

&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;for&nbsp&nbsp;&nbsp&nbsp;(&nbsp&nbsp;&nbsp&nbsp;int&nbsp&nbsp;&nbsp&nbsp;i&nbsp&nbsp;&nbsp&nbsp;=&nbsp&nbsp;&nbsp&nbsp;2;&nbsp&nbsp;&nbsp&nbsp;i&nbsp&nbsp;&nbsp&nbsp;<&nbsp&nbsp;&nbsp&nbsp;40;&nbsp&nbsp;&nbsp&nbsp;++i)&nbsp&nbsp;

&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;{&nbsp&nbsp;

&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;a[i]&nbsp&nbsp;&nbsp&nbsp;=&nbsp&nbsp;&nbsp&nbsp;a[i-1]&nbsp&nbsp;&nbsp&nbsp;+&nbsp&nbsp;&nbsp&nbsp;a[i-2];&nbsp&nbsp;

&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;printf&nbsp&nbsp;&nbsp&nbsp;("%d\n",&nbsp&nbsp;&nbsp&nbsp;a[i]);&nbsp&nbsp;

&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;}&nbsp&nbsp;

&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;return&nbsp&nbsp;&nbsp&nbsp;0;&nbsp&nbsp;

}&nbsp&nbsp;

===========================================&nbsp&nbsp;

递归版&nbsp&nbsp;

===========================================&nbsp&nbsp;

#include&nbsp&nbsp;&nbsp&nbsp;<stdio.h>&nbsp&nbsp;

int&nbsp&nbsp;&nbsp&nbsp;fb&nbsp&nbsp;&nbsp&nbsp;(int&nbsp&nbsp;&nbsp&nbsp;i)&nbsp&nbsp;

{&nbsp&nbsp;

&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;if&nbsp&nbsp;&nbsp&nbsp;(&nbsp&nbsp;&nbsp&nbsp;i&nbsp&nbsp;&nbsp&nbsp;<&nbsp&nbsp;&nbsp&nbsp;2&nbsp&nbsp;&nbsp&nbsp;)&nbsp&nbsp;

&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;return&nbsp&nbsp;&nbsp&nbsp;i&nbsp&nbsp;&nbsp&nbsp;==&nbsp&nbsp;&nbsp&nbsp;0&nbsp&nbsp;&nbsp&nbsp;?&nbsp&nbsp;&nbsp&nbsp;0&nbsp&nbsp;&nbsp&nbsp;:&nbsp&nbsp;&nbsp&nbsp;1;&nbsp&nbsp;

&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;return&nbsp&nbsp;&nbsp&nbsp;fb&nbsp&nbsp;&nbsp&nbsp;(i&nbsp&nbsp;&nbsp&nbsp;-&nbsp&nbsp;&nbsp&nbsp;1)&nbsp&nbsp;&nbsp&nbsp;+&nbsp&nbsp;&nbsp&nbsp;fb&nbsp&nbsp;&nbsp&nbsp;(i&nbsp&nbsp;&nbsp&nbsp;-&nbsp&nbsp;&nbsp&nbsp;2);&nbsp&nbsp;

}&nbsp&nbsp;

int&nbsp&nbsp;&nbsp&nbsp;main()&nbsp&nbsp;

{&nbsp&nbsp;

&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;for&nbsp&nbsp;&nbsp&nbsp;(&nbsp&nbsp;&nbsp&nbsp;int&nbsp&nbsp;&nbsp&nbsp;i&nbsp&nbsp;&nbsp&nbsp;=&nbsp&nbsp;&nbsp&nbsp;0;&nbsp&nbsp;&nbsp&nbsp;i&nbsp&nbsp;&nbsp&nbsp;<&nbsp&nbsp;&nbsp&nbsp;40;&nbsp&nbsp;&nbsp&nbsp;++i)&nbsp&nbsp;

&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;printf&nbsp&nbsp;&nbsp&nbsp;("%d\n",&nbsp&nbsp;&nbsp&nbsp;fb&nbsp&nbsp;&nbsp&nbsp;(i));&nbsp&nbsp;

&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;&nbsp&nbsp;return&nbsp&nbsp;&nbsp&nbsp;0;&nbsp&nbsp;

}&nbsp&nbsp;

匿名用户
2018-02-18
展开全部

非递归

#include<stdio.h>
#define END 40//结束的值,可更改
int main(void)
{
    int i;
    long long a=-1,b=1,t;
    for(i=0;i<=END;i++)
    {
        t=a+b;
        printf("%lld\t%lld\n",i,t);
        a=b;
        b=t;
    }
    return 0;
}

递归

#include<stdio.h>
#define END 40//结束的值,可更改
void fib(long long a,long long b,int i);
int main(void)
{
    fib(-1,1,-1);//这是我手工凑的
    return 0;
}
void fib(long long a,long long b,int i)
{
    int t;
    i++;
    t=a+b;
    printf("%lld\t%lld\n",i,t);
    if(i<END)
    {
        fib(b,t,i);
    }
}‍
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
千锋教育
2015-12-04 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部

递归法:

#include<stdio.h>
void main()
{
int Fibonacci(int n);
int n,i,c=0;

printf("请输入n的值:");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
c = Fibonacci(i);
printf("%12ld",c);
if(i%4==0) //用于换行 4个一行;
printf("\n");
}
}

int Fibonacci(int n)//函数部分;
{
long int f;

if(n==1 || n==2)
{
f=1;
}
else
if(n>=3)
f = Fibonacci(n-1) + Fibonacci(n-2);
return f;
}

非递归法:

#include<stdio.h>
void main()
{
int i,n;
int f[]= {1,1};
printf("请输入n的值:");
scanf("%d",&n);
for(i=2; i<=n; i++)
f[i] = f[i-2] + f[i-1];
for(i=0; i<=n; i++)
{
if(i%5==0) printf("\n");
printf("%12d",f[i]);

}
printf("\n");
}

递归可以使程序看起来比较简洁,但缺点是效率比较低,并且可能导致栈溢出,因此需要灵活使用递归。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
剑俨芒恬悦
2019-01-29 · TA获得超过3804个赞
知道大有可为答主
回答量:3103
采纳率:35%
帮助的人:189万
展开全部
递归法:
#include<stdio.h>
void main()
{
int Fibonacci(int n);
int n,i,c=0;
printf("请输入n的值:");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
c = Fibonacci(i);
printf("%12ld",c);
if(i%4==0) //用于换行 4个一行;
printf("\n");
}
}
int Fibonacci(int n)//函数部分;
{
long int f;
if(n==1 || n==2)
{
f=1;
}
else
if(n>=3)
f = Fibonacci(n-1) + Fibonacci(n-2);
return f;
}
非递归法:
#include<stdio.h>
void main()
{
int i,n;
int f[]= {1,1};
printf("请输入n的值:");
scanf("%d",&n);
for(i=2; i<=n; i++)
f[i] = f[i-2] + f[i-1];
for(i=0; i<=n; i++)
{
if(i%5==0) printf("\n");
printf("%12d",f[i]);
}
printf("\n");
}
递归可以使程序看起来比较简洁,但缺点是效率比较低,并且可能导致栈溢出,因此需要灵活使用递归。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式