C语言青蛙跳台阶问题

1.题目

一只青蛙跳一次只能跳1级台阶或跳2级台阶
求:该青蛙跳上第n级台阶总共有多少种跳法
例如:青蛙想跳至第二级台阶可以有两种跳法,一种是先跳一级再跳一级,另一种是直接跳两级台阶

2.分析与设计

2.1题目分析

题目中最关键的点是青蛙一次可跳1级台阶或2级台阶 ,根据这个点可以通过简单画图来求出一个规律性,设青蛙要跳上n级台阶,设func(n)为跳上n级台阶的跳法

可以得到以下的规律

2.2代码设计思路

青蛙有两种跳法,一种是跳到一级台阶,一种是跳上二级台阶
当n=1时:

  • 只有一种跳法

当n=2时:

  • 1.一级一级跳
  • 2.另一种直接跳两级

当n=3时:

  • 1.假设是先跳上一级台阶,那么剩下两级台阶,就是func(2)种跳法
  • 2.假设是先跳上两级台阶,那么剩下一级台阶,就是func(1)种跳法
  • 即func(3)=func(2)+func(1)

当n=4时:

  • 1.假设先跳上一级台阶,剩下三级台阶,就是func(3)种跳法
  • 2.假设先跳上两级台阶,剩下两级台阶,就是func(2)种跳法
  • 即func(4)=func(3)+fun(2)

以此类推
当n级台阶时,func(n)=func(n-1)+func(n-2)

3. 代码实现

3.1递归

c 复制代码
#include<stdio.h>
 
int func(int n)
{
	if (n == 1)
		return 1;
	else if (n == 2)
		return 2;
	else
		return func1(n - 1) + func1(n - 2);
}
 
int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = func(n);
	printf("func(%d)=%d\n", n, ret);
 
	return 0;
}

运行结果

画图推导

解释

c 复制代码
func(4)=func(3)+func(2)
=func(2)+func(1)+func(2)
=func(2)+func(1)+2
=2+1+2
=5

3.2非递归

可以看到上面递归的方法进行了大量重复运算,当数值不太大的时候就会运算很久,因此可以使用非递归方法,避免大量重复计算,从而提高代码效率

c 复制代码
#include<stdio.h>
 
int func(int n)
{
	int a = 1;
	int b = 2;
	int c = 0;
 
	if (n == 1)
		return a;
	else if (n == 2)
		return b;
	else
	{
		while (n - 2)
		{
			c = a + b;
			a = b;
			b = c;
			n--;
		}
		return c;
	}
}
 
int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = func(n);
	printf("func(%d)=%d\n", n, ret);
 
	return 0;
}

运行结果

画图推导

可以看出,当n>2时,循环进行n-2次,每一次循环结束,n--, 直到n-2=0跳出循环,返回结果

相关推荐
IT猿手13 小时前
多目标优化算法:多目标蛇优化算法(Multiple Objective Snake Optimizer,MOSO)(提供MATLAB代码)
开发语言·算法·matlab·动态路径规划·光伏模型参数估计
朔北之忘 Clancy14 小时前
2026 年 3 月青少年软编等考 C/C++ 一级真题解析
c语言·开发语言·c++·青少年编程·题解·考级
小成2023032026514 小时前
C++~01面向对象基础
开发语言·c++
会编程的土豆14 小时前
Go 方法接收者超清晰笔记(类型名 vs 变量名)
开发语言·笔记·golang
YY&DS14 小时前
Qt 嵌入 CEF 在 Linux 下必须设置 `QT_XCB_GL_INTEGRATION=xcb_egl才能加载网页
linux·开发语言·qt
csdn_aspnet14 小时前
javascript 算法 LeetCode 编号 70 - 爬楼梯
开发语言·javascript·算法·leetcode·ecmascript
Navigator_Z15 小时前
LeetCode //C - 1073. Adding Two Negabinary Numbers
c语言·算法·leetcode
han_hanker15 小时前
BeanUtils.copyProperties 和序列化的问题
java·开发语言·spring boot
野生技术架构师15 小时前
牛客网2026互联网大厂Java面试题汇总,附官方级答案解析
java·开发语言
暖焰核心15 小时前
C++内存管理和模板初阶
开发语言·c++