青蛙跳台阶问题C语言函数解法

注 :本人C语言初学者,菜鸟一枚,在B站自学,刚自学到函数这里看到这道题,(青蛙跳台阶问题),尝试着解题了一下,把我的解题思路分享给大家。
要解题,首先我们得知到什么是(青蛙跳台阶问题)?
青蛙跳台阶问题: “假设有一只青蛙,一次可以跳一个台阶或者两个台阶,问这只青蛙跳到第n个台阶有多少种跳法?”
用函数去解一道题,首先我们得寻找到这道题的规律,怎么找呢?(笨办法,假设台阶1~N个,然后自己算)
1个台阶有1种跳法
2个台阶有2种跳法
3个台阶有3种跳法(还挺容易算的,嘿嘿)
4个台阶有5种跳法(1111,211,121 112,22)
5个台阶有8种跳法(11111.221.212.122.2111.1211.1121.1112)
6个台阶( 脑壳疼。。。应该是13种,有兴趣的朋友可以验证一下)。
这样我们就可以得到一组数据( 1.2.3.5.8.13…)是不是跟斐波那契数很像,从第三位数开始它的值刚好是前两个数的和。
有了这个规律,我们就可以尝试去创建一个函数。假设我们创建一个函数,函数名是Abc(起名困难户,随便起一个函数名,不想在这里浪费脑细胞),它的返回类型是整形int,让它接受一个整形变量N,这里N就代表我们要算的金盘的个数,写成代码如下
int Abc(int N){}
在{}里我们就可以创建这个函数的实现过程了,首先尝试我们来用递归的办法来实现这个函数,根据计算得来的规律,我们知道N个数值是((Abc(N-1)+Abc(N-2)),我们需要创建一个临时变量来存放它返回的值(int a=0;)写成代码如下
Int a=0;
a=((Abc(N-1)+Abc(N-2));
return a;
这里我们可以发现这个算法只适合2个台阶以上的,只有1个台阶情况它的跳法为1。这里我们就需要创建一个循环变量while来实现这个函数,完成代码如下
int Abc(int N)
{
Int a=0;
while(N>=2)
{
a=((Abc(N-1)+Abc(N-2));
return a;
}
return 1;
}
这样我们就可以利用这个函数算出N个台阶这只顽皮的青蛙有多少种跳法了,但是有一个问题,如果N的数字交大的话,它需要的计算量非常的庞大,所以这个函数不适用于递归的办法来实现。那我们就改成非递归,完成代码如下
int Abc(int N)
{
Int a=1;
int b=0;
int c=0;
while(N>=1)
{
c=a+b;
b=a;
a=c;
N--;
return a;
}
break;
}
好了,就给大家分析到这里了,这里是用手机码的文章,代码没有经过验证,本人菜鸟一枚,如果有什么问题,请指正。如果您有更好的解法,敬请分享。
下附调用此函数代码
#include<stdio.h>
int main()
{
int a=0;
int b=0;
scanf("%d",&a);
b=Abc(a);
printf("%d个台阶有%d种跳法\n",a,b);
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值