青蛙跳第n级台阶有多少种跳法?汉诺塔问题是一个经典的递归问题。在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)

本题是递归算法的一种运用,在做题目的时候可以先思考可否用递归。然后找到递归出口,接下来找到递归关系。

在这个题目中,只有一个台阶的时候有一种跳法,两台阶的时候有两种跳法分别是:1 1; 2;,三台阶有3中跳法,分别是 1 1 1;1 2;2 1;四台阶有五种跳法,分别是 1 1 1 1;1 2 1;1 1 2; 2 2;大家可以按照这个依次推下去,可以得出第n个台阶跳法是它前两个台阶的跳法之和。

int jumpFloor(int number ) {   
        if(number==1)    //递归出口
            return 1;
    else if(number==2)  //递归出口
        return 2;
    else
        return jumpFloor(number-1)+jumpFloor(number-2);//递归关系
}

这个是牛客上的一个题目,大家可以找上面多找相关的题目来训练。加深对递归的理解运用。

https://www.nowcoder.com/practice

汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?

void hanocci(int n, char A, char B, char C)//有n个圆盘  三个柱子分别为A,B,C
{
	if (n == 1)
	{
		printf("%c -> %c\n", A,C);
	}
	else {
		hanocci(n - 1, A ,C, B);//第n-1个跳过柱子C,从柱子A移动到柱子B
		printf("%c -> %c\n", A, C);
		hanocci(n - 1, B, A, C);//第n-1个跳过柱子A,从柱子B移动到柱子C
	}
}
int main() {
	printf("输入盘子数:\n");
	int n;
	scanf("%d",&n);
	hanocci(n, 'A', 'B', 'C');//n个盘子,柱子分别为A,B,C
	system("pause");
	return 0;

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值