青蛙跳台阶

文章讨论了一个经典的编程问题,即青蛙跳台阶。青蛙有两种跳法,每次跳一个或两个台阶。通过递归思想,可以发现解题规律类似于斐波那契数列。当台阶数为n时,跳法数量由前两个台阶的跳法数相加得出。提供的C语言代码实现了这个算法,用于计算给定台阶数的跳法数。
摘要由CSDN通过智能技术生成

问题描述

青蛙有两种跳法,可以一次跳一个台阶,也可以一次跳两个台阶
问跳n个台阶有多少种跳法

问题分析

对于递归问题,我们无需把问题想得过于复杂,要明白递归本身就是找规律,我们无需考虑太多种情况,只需要找到前几种情况展现出来的规律,就可以总结出一般规律。

无论有多少个台阶,我们只有两种选择,当选择跳一个台阶的时候,那么我们的面前就只有n-1个台阶了;当选择跳两个台阶的时候,那么我们的面前就只有n-2个台阶了。
所以当我们面临n-1个或n-2个台阶的时候,我们又只有两种选择,就好比一条路分出来两条岔路。
注意:一定要弄明白一件事,我们求解的是有多少种跳法,而不是要跳多少次,就是1和2的排列组合起来的种数【我当时就混淆了很久,一直没理解】
青蛙跳台阶
我们用Step()函数来求解有多少种跳法,由于跳一个台阶只有一种跳法,两个台阶有两种跳法(一次跳一个,跳两次,这是一种跳法;或者一次跳两个,直接跳完,这是另一种跳法),当n>=3时,我们就可以用表达式来表示,Step(n)=Step(n-1)+Step(n-2)这样就包含了所有的种数(是不是感觉很像斐波那契数列),你的面前有两条路,每一条路都包含了接下来的两种情况,所以,把他俩加起来递归就可以了。

完整代码

#include <stdio.h>

int Step(int n)
{

	if (n <= 2)
	{
		return n;
	}
	return Step(n - 1) + Step(n - 2);
}

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

	return 0;
}

如有疏漏和建议,请评论留言哦!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值