C语言编程:用递归和非递归法输出斐波那契数列
当n=0时,Fib(n)=0;当n=1时,Fib(n)=1;当n>1时,Fib(n)= Fib(n-1)+ Fib(n-2).
试过了,很多语法错误啊,能帮忙再改改吗? 展开
你用的什么编译器 我用VC++6.0完全正常 我给你贴图
循环版 
========================================= 
#include    <stdio.h> 
int    main() 
{ 
        unsigned    int    a[40]    =    {0,    1}; 
        printf    ("%d\n%d\n",    a[0],    a[1]); 
        for    (    int    i    =    2;    i    <    40;    ++i) 
        { 
                a[i]    =    a[i-1]    +    a[i-2]; 
                printf    ("%d\n",    a[i]); 
        } 
        return    0; 
} 
=========================================== 
递归版 
=========================================== 
#include    <stdio.h> 
int    fb    (int    i) 
{ 
        if    (    i    <    2    ) 
                return    i    ==    0    ?    0    :    1; 
        return    fb    (i    -    1)    +    fb    (i    -    2); 
} 
int    main() 
{ 
        for    (    int    i    =    0;    i    <    40;    ++i) 
                printf    ("%d\n",    fb    (i)); 
        return    0; 
} 
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 · 做真实的自己 用良心做教育
递归法:
#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");
}
递归可以使程序看起来比较简洁,但缺点是效率比较低,并且可能导致栈溢出,因此需要灵活使用递归。
#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");
}
递归可以使程序看起来比较简洁,但缺点是效率比较低,并且可能导致栈溢出,因此需要灵活使用递归。