递归(青蛙跳台阶)

今天小编在练习敲代码的时候忽然看到这样一道题小乐乐走台阶,题目如下:

 这个时候小编定睛一看,这不是我们c语言函数中很经典的递归典型题目吗?小编心想上次函数篇中递归那个部分肯定还是有相当一部分的小伙伴们没有完全听懂的,那小编肯定不能坐视不管,今天就借助这个题目给大家再来讲讲递归。

青蛙跳台阶

有一只青蛙会跳台阶,现在有n阶台阶在青蛙面前,青蛙一次可以跳一阶台阶,也可以跳两阶台阶,那么请问青蛙有多少种办法跳完台阶?

kyke 

大家看到这个问题肯定跟小编第一次看到一样会愣一下,一次一阶,一次两阶,好像也没有多难吗?但是大家仔细想一想真的是这样吗?要是100层,1000层,10000层亦或更多,那这个问题还有大家想象中的简单吗?具体方法是什么,听小编娓娓道来,大家想一想如果只有一阶台阶,是不是只有一种方法;如果有两阶台阶,那是不是就有两种方法,一次两阶,或者两次一阶;如果有三阶是不是第一次,青蛙只能跳一阶或者两阶,当青蛙第一次跳一阶的时候是不是还剩下两阶,此时回到了青蛙跳两阶的问题,当青蛙第一次跳两阶时是不是还剩下一阶,也回到了青蛙跳一阶的问题上去了。大家仔细想一想后面无论多少个函数,是不是都是这个道理,这也就是我们递归的关键所在,将一个及其复杂的问题逐渐剖解成无数个简单易懂问题。下面是代码:

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

不难看出,青蛙第一次跳台阶只能选择一或二,然后就是还剩n-1和n-2两种情况,这就跟斐波那契数列是一样的问题了。

这次小编跟大家的分享到这里就结束了,如果大家觉得小编写的不错,希望大家给小编点个赞!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vex小摆子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值