美文网首页
小青蛙跳台阶

小青蛙跳台阶

作者: 程序学习er | 来源:发表于2019-03-19 01:40 被阅读0次
题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

这题其实有点像fib数列,用递归写的

递归写法

def jumpFloor(number):
    if number <= 0:
        return 0
    if number in [1,2]:
        return number
    return jumpFloor(number - 2) + jumpFloor(number - 1)

很可惜 虽然想了出来但是并没有通过。

运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大


好吧,用递归写的那一刻我就该意识到这一点

尾递归写法

def jumpFloor(number, curr = 2, last = 1):
    if number == 0:
        return 0
    if number == 1:
        return 1
    if number == 2:    #这里是if,如果是else也会出错
        return curr    #这里是返回curr,返回2会出错
    return jumpFloor(number - 1, curr + last, curr)

尾递归我吃了好多坑,倒数第二行返回2我简直是脑抽,因为number最终肯定会变成2,那么不管怎么样输出的结果都是2;

在这个代码里,最后的出口并不是最下面的

return jumpFloor(number - 1, curr + last, curr)

而是代码上面那个判断条件

    if number == 2:    #这里是if,如果是else也会出错
        return curr    #这里是返回curr,返回2会出错

所return的是curr,而并不是靠上级领导等下属都忙完了再来添上一笔,这点和递归很不一样。

关于第三个if可以为curr,那么第二个if是否可以也改成last呢,其实无影响,因为number根本就不可能到为1的时候。

关于倒数第3行为什么不能改else,这里有个例子

def f(n):
    if n == 0:
        print(0)
    if n == 1:
        print(1)
    else:
        print(2)

if __name__ == '__main__':
    f(0)

输出结果为

0
2

这里看下来,会一顺溜的打印下来,结果就不唯一了

还有个情况

def f(n):
    if n == 1:
        return 1
    else:
        return 2
    if n == 0:   #这句他妈逼甚至都不会被管
        return 0

if __name__ == '__main__':
    print(f(0))

在Pycharm里,写标示的下面都是亮黄灯,else下面的if语句甚至不会再执行。

总结:有多个if的情况下就不要再用else

虽然编译通过了 但是还是想试试其他写法

动态规划

pass

学到我再补8

相关文章

  • 动态规划

    青蛙跳台阶问题 问题:一个青蛙,一次只能跳一级台阶,或者跳两级台阶,这个青蛙跳 n 级台阶有多少种跳法? 如果这只...

  • 算法---青蛙跳台阶问题

    一只青蛙可以一次跳一级台阶,也可以一次跳两级台阶,如果青蛙要跳上n级台阶,共有多少钟跳法? 问题分析 当青蛙即将跳...

  • 青蛙跳台阶问题

    青蛙跳台阶One 问题描述 一只青蛙一次可以跳1级台阶,也可以跳2级台阶。求该青蛙跳上一个级的台阶总共有多少种跳法...

  • 青蛙跳台阶--python

    一只青蛙可以一次跳 1 级台阶或者一次跳 2 级台阶,例如:跳上第 1 级台阶只有一种跳法:直接跳 1 级即可。跳...

  • 常见数据结构与算法题

    范畴:递归 1、青蛙跳台阶 青蛙跳台阶算法,每次可以跳1级或两级,请问有n级台阶,有多少种算法,递归和非递归如何写...

  • python编程题

    1、台阶问题、斐波那契 一只青蛙可以跳上一级台阶,也可以跳上两级台阶,求青蛙跳上一个n级台阶共有多少种跳法 方法一...

  • 每日一题[12]-青蛙跳台阶

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

  • 010.2,斐波那契数列

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

  • 循环-跳台阶-java

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

  • 【leetcode C语言实现】剑指 Offer 10 II.青

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案...

网友评论

      本文标题:小青蛙跳台阶

      本文链接:https://www.haomeiwen.com/subject/qmqwmqtx.html