青蛙跳台阶问题

博客探讨了经典的青蛙跳台阶问题,通过递归和非递归两种编程方法实现求解,展示了动态规划在解决此类问题上的应用。文章提供了详细的分析和C++代码示例,解释了如何计算跳到不同台阶的跳法数量,并讨论了两种方法的效率差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【问题】:一只青蛙前面有一座台阶;青蛙一次可以跳上1级台阶,也可以跳上2级;若此台阶有n级,则青蛙跳到第n级台阶有多少种跳法?

【答案】:设f(n)表示跳到第n级台阶的跳法数,则f(n)=f(n-1)+f(n-2),(n>2),且f(1)=1,f(2)=2

【分析】:
青蛙一次可以跳上1级台阶,也可以跳上2级,则跳到第1级台阶有1种跳法;跳到第2级台阶有2种跳法。


当台阶有3级时,跳到第3级台阶有两种方法:一种从第2级台阶跳、一种从第1级台阶跳,由前已知,跳到第2级台阶有2种跳法,跳到第1级台阶有1种跳法,所以跳到第3级台阶有2+1=3种跳法。


当台阶有4级时,跳到第4级台阶有两种方法:一种从第3级台阶跳、一种从第2级台阶跳,由前已知,跳到第3级台阶有3种跳法,跳到第2级台阶有2种跳法,所以跳到第4级台阶有3+2=5种跳法。


当台阶有5级时,跳到第5级台阶有两种方法:一种从第4级台阶跳、一种从第3级台阶跳,由前已知,跳到第4级台阶有5种跳法,跳到第3级台阶有3种跳法,所以跳到第5级台阶有5+3=8种跳法。


当台阶有n级时,跳到第n级台阶有两种方法:一种从第n-1级台阶跳、一种从第n-2级台阶跳,所以,跳到第n级台阶的跳法=跳到第n-1级台阶的跳法+跳到第n-2级台阶的跳法

【编程】:

语言:C++

两种方法:递归,非递归。后者在较大输入时有更快的效率。注意:n>45时结果对int型数据溢出

#include<iostream>
using namespace std;

//f函数,递归
int f(int n) {
	if (n <= 0)return 0;//非法输入的处理
	if (n == 1)return 1;
	if (n == 2)return 2;

	return f(n - 1) + f(n - 2);//递归调用f函数
}
//非递归
int jumpMethod(int n) {
	if (n <= 0)return 0;//非法输入的处理
	int* array = new int[n];//开辟动态数组空间
	for (int i = 0; i < n; i++) {//为数组各元素赋值
		switch (i) {
		case 0:array[i] = 1; break;
		case 1:array[i] = 2; break;
		default:array[i] = array[i - 1] + array[i - 2];
		}
	}
	return array[n - 1];//数组最后一个元素的值就是结果
}

int main() {
	int n;
	cout << "请输入台阶数:";
	cin >> n;

	//非递归方法
	cout << "跳到第" << n << "级台阶有" << jumpMethod(n) << "种跳法" << endl;
	//递归方法
	cout << "跳到第" << n << "级台阶有" << f(n) << "种跳法" << endl;

	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值