C语言:采用递归调用函数方法计算Fibonacci数列的前20项

如题所述

#include<iostream.h>

#include<iomanip.h>

long fibonacci(long,int);

void main(void)

{

int n;

cout<<"please input\"n\"";

cin>>n;

cout<<endl;

if(fibonacci(n,1)==-1)cout<<"error message:n<0";

}

long fibonacci(long number,int out)

{

if(number<0)

return-1;//return error message

else if(number==0)

return 0;

else if(number==1)

{

if(out)

cout<<number<<setw(5);

return 1;

}

else

{

long lVal;

if(out)

lVal=fibonacci(number-2,0)+fibonacci(number-1,1);

else

lVal=fibonacci(number-2,0)+fibonacci(number-1,0);

if(out)

cout<<lVal<<setw(5);

return lVal;

}

}

扩展资料:

斐波那契数列是一组第一位和第二位为1,从第三位开始,后一位是前两位和的一组递增数列,

像这样的:1、1、2、3、5、8、13、21、34、55......

今天,用四种方式来进行实现:

1.递归

int Fibon1(int n)

{

if(n==1||n==2)

{

return 1;

}

else

{

return Fibon1(n-1)+Fibon1(n-2);

}

}

int main()

{

int n=0;

int ret=0;

scanf("%d",&n);

ret=Fibon1(n);

printf("ret=%d",ret);

return 0;

}

2.非递归

int Fibno2(int n)

{

int num1=1;

int num2=1;

int tmp=0;

int i=0;

if(n<3)

{

return 1;

}

else

{

for(i=0;i>n-3;i++)

{

tmp=num1+num2;

num1=num2;

num2=tmp;

}

return tmp;

}

}

3.数组

public int Fibno3(int n)

{

List<int>list=new List<int>();

list.fib(1);

list.fib(1);

int count=list.Count;

while(count<n)

{

list.fib(list[count-2]+list[count-1]);

count=list.Count;

}

return list[count-1];

}

4.队列

public int Fibno4(int n)

{

Queue<int>queue=new Queue<int>();

queue.Enqueue(1);

queue.Enqueue(1);

for(int i=0;i<=n-2;i++)

{

queue.Enqueue(queue.AsQueryable().First()+queue.AsQueryable().Last());

queue.Dequeue();

}

return queue.Peek();

}

参考资料:

百度百科——斐波那契数列

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-29

使用递归进行操作时,关键是设置好递归条件。斐波那契数列的定义如下:

 f2 = f0 + f1 = 0 + 1 = 1,所以条件可以设置成当n==1或者n==2时,返回1。其它项则依次递归调用即可。

#include <stdio.h>
int f(int n){
if(n==1 || n==2)
return 1;
else
return (f(n-2)+f(n-1));
}
int main(){
const int num = 20;
int i;
for(i=1;i<=num;i++){
printf("%-6d",f(i));
if(i%5==0)
printf("\n");
}
printf("\n");
return 0;
}

第2个回答  推荐于2017-09-07
#include <stdio.h>
#define N 20
main(){
int f(int n);
int i;
for(i=1;i<=N;i++){
printf("%-6d",f(i));
if(i%5==0)
printf("\n");
}
printf("\n");
}

int f(int n){
if(n==1 || n==2)
return 1;
else
return (f(n-2)+f(n-1));
}本回答被提问者采纳
第3个回答  2011-03-05
long fibonacci(int n)
{ long t;
if (n=2)
{ t=1;
return t;
}
if (n=1)
{ t=1;
return t;
}
t=fibonacci(n-1)+fibonacci(n-2);
return t;

}

1、没有调试;
2、主 函数 自己 写;
第4个回答  2012-06-09
#include <stdio.h>
#define N 20
main(){
int f(int n);
int i;
for(i=1;i<=N;i++){
printf("%-6d",f(i));
if(i%5==0)
printf("\n");
}
printf("\n");
}

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