在用C语言中,用递归解决青蛙跳台阶问题

下面是全部代码,如果没有兴趣往后读可以直接自取:

//青蛙跳台阶问题
#include <stdio.h>

int jumpWays(int n) {
    if (n == 1)
        return 1;
    if (n == 2)
        return 2;
    //看青蛙的第一步怎么跳
    //如果跳一个台阶,则剩下 jumpWays(n - 1) 个台阶
    //如果跳两个台阶,则剩下 jumpWays(n - 2) 个台阶
    return jumpWays(n - 1) + jumpWays(n - 2);
}

int main() {
    int n;
    printf("Enter the number of steps: ");
    scanf("%d", &n);
    printf("Number of ways to jump: %d\n", jumpWays(n));
    return 0;
}

玩法介绍:

        一个青蛙一次可以跳上一级台阶,也可以跳上两级台阶。问青蛙跳上一个 n 级的台阶总共有多少种跳法。

问题解决:

        对于参数为 n 的青蛙跳台阶问题,考虑它第一步跳了一格,那么剩下的就是参数为 n-1 的青蛙跳台阶问题,如果考虑它第一步跳了两格,那么剩下的就是参数为 n-2 的青蛙跳台阶问题,从而得到代码:

int jumpWays(int n) {
    //看青蛙的第一步怎么跳
    //如果跳一个台阶,则剩下 jumpWays(n - 1) 个台阶
    //如果跳两个台阶,则剩下 jumpWays(n - 2) 个台阶
    return jumpWays(n - 1) + jumpWays(n - 2);
}

        接下来考虑,(n == 1)和(n == 2)的条件下用 jumpWays(n - 1) + jumpWays(n - 2); 这么写肯定是不合适的,因此额外写出,得到完整代码:

int jumpWays(int n) {
    if (n == 1)
        return 1;
    if (n == 2)
        return 2;
    //看青蛙的第一步怎么跳
    //如果跳一个台阶,则剩下 jumpWays(n - 1) 个台阶
    //如果跳两个台阶,则剩下 jumpWays(n - 2) 个台阶
    return jumpWays(n - 1) + jumpWays(n - 2);
}

        这里面(n == 1)时,就只有一种情况,(n == 2)时有两种跳法。

        不要去费脑筋去想运行的时候里面具体是如何嵌套以及如何执行的了,内部调用了两次自己,其计算复杂度将指数级增长,函数还没死循环,自己大脑就死循环了,况且想的那么具体对写代码也没有好处。逻辑通,不少条件,就能写好递归。

        递归的灵魂是注释,自己写完代码一定不要忘记写注释,否则过几天再看代码就不知道自己为什么这么写了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王bf

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

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

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

打赏作者

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

抵扣说明:

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

余额充值