青蛙跳台阶问题分析

青蛙跳台阶问题是计算机科学中的一个经典问题,也被称为斐波那契数列问题。具体来说,问题描述是这样的:

一只青蛙可以一次跳一级台阶,也可以一次条两级台阶,如果青蛙要跳上n级台阶,共有多少种跳法

ec9e7220424bcbbd855e81fab16a9fe6.png

这个题是一个典型的斐波那契数列,斐波那契数列是一种非常著名的数字序列,其特点是每一项都是前两项的和.在这个问题中,我们可以把每个台阶看作斐波那契数列中的一项。

首先我们先用递归的方法:

#include<stdio.h>
int function(int n)
{
  if(n==1) 
     return 1;
  else if(n==2)
     return 2;
  else
     return function(n-1)+function(n-2);
}
int main()
{
  int x=0;
  scanf("%d",&x);
  int ret=function(x);
  printf("function(%d)=%d\n",x,ret);
  return 0;
}

755686bc9a2ec56a51d69108a1baae20.png 显然这个运行结果是正确的

方法二:循环

#include<stdio.h>
int function(int n)
{
  int i=1;
  int j=2;
  int tmp=0;
  if(n==1)
    return i;
  else if(n==2)
    return j;
  else
  {
    while(n-2)
    {
      tmp=i+j;
      i=j;
      j=tmp;
      n--;
    }
    return tmp;
}
int main()
{
  int x=0;
  scanf("%d",&x);
  int ret=function(x);
  printf("function(%d)=%d\n",x,ret);
  return 0;
}
  

4b9988be1476b212cc1e8da54ab24e7a.png 

运行结果与上一个是相同的没有任何问题

因此我们可以通过循环或递归的方式解决这个问题。但是循环和递归的方式效率较低,因为存在大量的重复计算。为了提高效率,我们可以采用动态规划的方法,即预先计算并存储一些特定的跳法数,然后用这些已知的跳法数来推算其他的跳法数。

#define MAX 100
int function(int number)
{
	int con = (int)1e9 + 7;
	if (number == 1)
		return 1;
	else if (number == 2)
		return 2;
	else
	{
		int dp[MAX];
		dp[1] = 1;
		dp[2] = 2;
		int i = 0;
		for (i = 3; i <= number; i++)
		{
			dp[i] = dp[i - 1] % con + dp[i - 2] % con;
		}
		return dp[number];
	}
}

int main()
{
	int x=0
	scanf("%d", &x);
	int ret = function(x);
	printf("function(%d)=%d\n", x, ret);
	return 0;
}

在实际应用中,这个问题常常被用来解释和演示动态规划和递归的思想,以及他们在解决实际问题中的应用。 

 本次分享就到这里,感谢大家观看和关注!

 

 

 

 

 

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值