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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();

参考资料:

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

参考技术A

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

 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;

参考技术B #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));
本回答被提问者采纳
参考技术C 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、主 函数 自己 写;
参考技术D #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));

C语言 递归方法调用函数计算n!

#include<stdio.h>
int fun(int n)   //定义函数

    if(n==0||n==1)
    
        n=1;
    
    else
    
     n=n*fun(n-1);  //递归调用函数
    

  int main()
  
        int i,j;
        printf("请输入一个数字:\\n");
        scanf("%d",&i);
        j=fun(i);
        printf("它的阶乘为: %d",j);
  

测试结果:

相比于传统的利用循环计算阶乘:

#include<stdio.h>
int main()

    int i=1,n;
    int sum=1;   //设初值为1,因为0和1的阶乘都为1;
    printf("输入一个正的数字:\\n");
    scanf("%d",&n);
    for(i=1;i<=n;i++)  //循环的次数,由输入的n决定
    
        sum=sum*i;  //循环计算阶乘
    
    printf("它的阶乘为:%d",sum);

测试:

我们发现调用函数递归计算的运算时间要比循环计算阶乘的时间长。

以上是关于C语言:采用递归调用函数方法计算Fibonacci数列的前20项的主要内容,如果未能解决你的问题,请参考以下文章

如何计算fibonacci函数的递归调用次数

c语言编写计算斐波那契(Fibonacci)

C语言 递归方法调用函数计算n!

C语言 递归程序 求解

C语言递归算法解决李白打酒问题

用C++求fibonacci数