0
点赞
收藏
分享

微信扫一扫

青蛙跳台阶问题代码

灵魂跑者 2022-05-06 阅读 199

一、问题描述

一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法?

二、思考过程

n=1,有1种跳法

n=2,有2种跳法

n=3,有3种跳法

n=4,有5种跳法

n=5,有8种跳法

这个数列为:1,2,3,5,8,......

我们发现:第n次的跳法数为第n-1次和第n-2次之和

类似于菲波那切数列的规律

三、用递归实现

#include<stdio.h>
int ways(int n)
{
	if (n<=2 )
	{
		return n;
	}
	else if (n>2)
	
		return ways(n - 1) + ways(n - 2);
}


int main()
{
	int n = 0;
	//输入台阶数n
	printf("输入的台阶数>:");
	scanf("%d", &n);
	//青蛙可以跳1-2格台阶跳n阶有多少种跳法//1阶1种;2阶2种;3阶3种;4阶5种;5阶8种,这样类似斐波那契数列
	printf("青蛙可以跳%d台阶有%d方法", n, ways(n));


}

使用递归实现的代码效率太低,做了很多重复的计算。

四、用循环实现

#include<stdio.h>

int ways(int n)
{
	int a = 0;
	int b = 1;
	int c = 0;
	while (n>=1)
	{ 
		c = a + b;
		a = b;
		b = c;
		n--;
	}
	return c;
}


int main()
{
	int n = 0;
	//输入台阶数n
	printf("输入的台阶数>:");
	scanf("%d", &n);
	//青蛙可以跳1-2格台阶跳n阶有多少种跳法//1阶1种;2阶2种;3阶3种;4阶5种;5阶8种,这样类似斐波那契数列
	printf("青蛙可以跳%d台阶有%d方法",n,ways(n));


}
举报

相关推荐

0 条评论