利用递归求斐波纳契数列的和

简介: 递归的方法更加简单,更容易理解

之前我们可以用循环去求斐波纳契数列的和

1. #include<stdio.h>
2. int fib(int n)
3. {
4.     int a=1,b=1,c=1;
5.     while(n>2)
6.     {
7.         c=a+b;
8.         a=b;
9.         b=c;
10.         n--;
11.     }
12.     return c;
13. 
14. }
15. int main()
16. {
17.     int n=1;
18.     printf("请输入阶数\n");
19.     scanf("%d",&n);
20.     printf("%d\n",fib(n));
21.     return 0;
22. }

学了递归,之后我们就可以利用数学公式,写出递归去求斐波纳契数列的和

1. #include<stdio.h>
2. int fib(int n)
3. {
4. 
5.     if(n<=2)
6.     {
7.         return 1;
8.     }
9.     else
10.         return fib(n-2)+fib(n-1);
11. }
12. int main()
13. {
14.     int n=1;
15.     printf("请输入阶数\n");
16.     scanf("%d",&n);
17.     printf("%d\n",fib(n));
18.     return 0;
19. }

对比两个两个代码,可知递归的方法更加简单,更容易理解



相关文章
|
编译器
位运算、递推与递归
位运算、递推与递归
53 0
递归和非递归分别实现求第n个斐波那契数
递归和非递归分别实现求第n个斐波那契数
80 0
汉诺塔(递归+ 非递归版)
汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题。在A,B,C三根柱子上, 有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔。 游戏中的每一步规则如下:
271 1
汉诺塔(递归+ 非递归版)
|
机器学习/深度学习 人工智能 算法
『递归』汉诺塔和全排列
使用递归编写一个程序实现汉诺塔问题,要求在输入圆盘数量之后,输出圆盘的移动步骤,输出格式示例如下: 第1步:1号盘从A柱移至B柱第2步:2号盘从A柱移至C柱
234 0
PAT乙级 (二分) 1030.完美数列
PAT乙级 (二分) 1030.完美数列
105 0
|
机器学习/深度学习
用递归和非递归实现斐波那契数列
用递归和非递归实现斐波那契数列
213 0
用递归和非递归实现斐波那契数列
|
算法
数列最值的递归解法
在看到辗转相除法的递归解法后,不禁想到涉及比较的分治算法、三目运算符和递归简直就是绝配,一眨眼,脑海中就迸出了数列最小值的递归解法,每一个数都与后面数组的最小值相比较,思路有了,动手吧。 //辗转相除法    int gcd_division(int a,int b)   {       return b==0?a:gcd_division(b,a%b);    }     一、思路与改进     将数组每一个元素与该元素后数组最小值相比较,最后一个数组元素返回自身,即可得到整个数组的最小值。
1078 0
递归与动态规划
凡是递归的过程,都可以化成树的过程。递归就是问题变成子问题求解的过程。动态规划暂时没明白,好像是需要一张动态规划表,是根据递归搞出来的。 问题1:开始有一头母牛,母牛每年会生一只母牛,新出生的母牛成长三年后也能每年生一只母牛,假设牛都不会死。
700 0