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

 我来答
问明6E
高粉答主

2019-05-17 · 每个回答都超有意思的
知道答主
回答量:279
采纳率:100%
帮助的人:12.4万
展开全部

#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();

}

参考资料:

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

吉祥二进制
高粉答主

推荐于2017-09-29 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84564

向TA提问 私信TA
展开全部

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

 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;
}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
先小涛
推荐于2017-09-07 · TA获得超过145个赞
知道答主
回答量:37
采纳率:0%
帮助的人:0
展开全部
#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));
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
萍水e相逢
2011-03-05 · TA获得超过3万个赞
知道大有可为答主
回答量:5.9万
采纳率:46%
帮助的人:1.4亿
展开全部
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、主 函数 自己 写;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zap1972312
2012-06-09
知道答主
回答量:52
采纳率:0%
帮助的人:10.4万
展开全部
#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)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式