栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

青蛙跳台阶问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

青蛙跳台阶问题

【问题】:一只青蛙前面有一座台阶;青蛙一次可以跳上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
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;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1032478.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号