吊炸天


私信TA

用户名:dotcpp0725752

访问量:74

签 名:

等  级
排  名 21413
经  验 635
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 ggs
专  业

  自我简介:

解题思路:递归的全名叫做递推和归回,它是不断的递推和归回

斐波那契数列又名叫兔子数列,f(0)=1;f(1)=1;f(2)=2......从这我们可以得出一个表格

1

1
235813213455
0123456789
我们看这个表格,前两项都是为1,所以当n<=2的时候,永远都是为一;但当n>2的时候,可以得出f(n)=f(n-1)+f(n-2),所以我们可以利用这层递推关系来得出这个结果。

注意事项:如果递归使用的不恰当会造成不必要的麻烦,而假设n的数较大,容量值则会不断上,会导致一些问题出现,而且此题如果实在想不出递归关系可以使用迭代方法,动态分配,尾递归来求解。


参考代码:

1.递归方法

#include<stdio.h>
int Fib(int n) //运用递归方法解决斐波那契数列问题
{
    if(n<=2)
    return 1;
    else
    return Fib(n-1)+Fib(n-2); //这个是指当n>2时候的结果
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        printf("%d ",Fib(i));
    }
return 0;
}

2.迭代方法(此方法借用“教你夺冠”这位博主的方法)

#include <stdio.h>
#include <string.h>
 
long fibonacci(int n)
{
    if (n <= 2)
    {
        return 1;
    }
 
    long result;
    long pre_result;
    long pre_pre_result;
 
    pre_result = pre_pre_result = 1;
 
    while (n > 2)
    {
        result = pre_result + pre_pre_result;
        pre_pre_result = pre_result;
        pre_result = result;
        n--;
    }
 
    return result;
}
 
int main()
{
    int N;
    scanf("%d", &N);
 
    int i;
    
 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

在补充一种方法,此方法叫尾递归,不存在效率问题,代码如下
#include<stdio.h>
int Fib(int n)
{
   int a=1;
   int b=1;
   int c=1;
   while(n>=3)
   {
       c=a+b;
       a=b;
       b=c;
       n--;
   }
   return c;
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        printf("%d ",Fib(i));
    }
return 0;
}
2024-01-24 09:06:37
  • «
  • 1
  • »