0
点赞
收藏
分享

微信扫一扫

经典函数递归问题

夹胡碰 2022-03-18 阅读 60

斐波那契数列:

斐波那契数列是指的这样的一个数列,从第3项开始,以后每一项都等于前两项之和。写成递推公式即

//斐波那契数列:已知前两项可以算出第任意项
//1 1 2 3 5 8 13 21 34......
#include<stdio.h>
int Fb(int x)
{
    if (x<= 2)
        return 1;
    else(x>2)
        return (Fb(x-1)+Fb(x-2));

}
int main()
{
    int n = 0 ;
    scanf("%d\n",&n);
    int ret = Fb(n);
    printf("%d",ret);
    return 0;
}

青蛙跳台阶

题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

解题关键        由于青蛙一次可以跳1级或者2级

                           反过来——>   第n阶种跳法 = 第n - 1 阶种跳法+ 第n - 2阶种跳法

#include<stdio.h>
int Fb2(int x)
{
	if (x == 1)
		return 1;
	if (x == 2)
		return 2;
	if (x >= 2)
		return(Fb2(x - 1) + Fb2(x - 2));                  
}
int main()
{
	int n = 0;
	scanf_s("%d", &n);
	int ret = Fb2(n);
	printf("%d", ret);
	return 0;
}

汉诺塔问题(汉诺塔问题_百度百科

解题关键        关键中心柱

层数:2  

先将第一块放到中心柱上 ,再将第二块放到C柱上

总次数= 1 * 2 +1 = 3

 

层数:3

 

 先将前两块放到中心柱上,再将最长块放到C柱

总次数 =   2*(1*2+1)+ 1=7

当为n

总次数 F(n) =2*F(n-1) + 1 

#include<stdio.h>
int Fb3(int x)
{
    if (x == 1)
        return 1;
    if (x >= 2)
        return (2 * Fb3(x-1)+1);
}
int main()
{
    int n = 0;
    scanf_s("%d", &n);
    int ret = Fb3(n);
    printf("%d", ret);
    return 0;
}

举报

相关推荐

0 条评论