可能是全网最憨的青蛙跳台阶解法........
记录一下 太憨了.....
原题目(同事发过来的)
递归解法
下面这个是本人的憨批源代码
step 总台阶数
num 计数变量
now 当前台阶总数
# step=int(input("请输入台阶的级数:")) step = 4 num = 0 # now = 0 def jump(now): global num, step for i in range(1, step+1): now += i # print(i, num, now) if now < step: jump(now) print("前几个i:%s"%(i)) elif now == step: num += 1 print("相等时候的i:%s"%(i)) now -= i for j in range(1, step+1): print("第1次跳{}阶".format(j)) jump(j) print(num) print(num+1)
解题思路
我的想法是这样的
第一次可以跳N阶 一共N种情况从1开始 用for循环搞定
那就先算第二次的情况 第二次可以跳 (N-第一次跳的阶数) 所以也是从1开始
之后的情况跟第二次一样 所以并入第二次 也就是一般情况
于是定义函数jump() 接受当前 也就是第一次跳完之后的阶数now 然后就是函数jump设计 避免变量的变化(其实可以用常量代替......不过为了符合N 还是用了全局)
循环的次数设计 第二次以及之后每一次的跳阶阶数为1到step-now 然后让当前阶数加上当次循环阶数i
然后统计:
如果 加完之后当前总阶数小于总阶数 则代表还得继续跳 进入下一轮 故再次调用函数jump() 开始递归 为了结束递归之后能看到本轮递归i的值 加上了
print("前几个i:%s" % (i))
第二种情况 正好跳完 那么就将计数变量num加一 这里的print同理
第三种情况 当前总阶数溢出了......不用管(其实这里是可以优化的 直接退出循环就可以了 不过因为运算量不大 就没写 毕竟已经很蠢了......)
思路就是这样 写的时候有点麻烦
Q1:
在跳完一次之后 now的值无法还原 也就是跳完1之后 剩下的情况无法统计完全 也就是 121 和 112 不容易做到 将now传到上一层递归出现了问题 因为最开始写的是 else 然后使用break退出 也就是
else: num += 1 print("相等时候的i:%s" % (i)) break
A1:
最后在函数结束的最后流程自减 因为能够正常结束当轮函数 只有两种情况 要么满足if 已经回到了上一轮 要么满足elif 满足最后一轮相等 当然 都不满足的时候自减自然是没问题的 而前两种情况都是要加完之后要减的 所以直接放到最后 取消使用else break 就可以解决了 算是警醒自己 这种情况不要使用全局 太容易出问题了
Q2:
少一种情况 也就是第一次就全部跳完的情况
A2:
呃......最后加一就可以了
总结:
还是数学方法简单 数学 YYDS
PS:好伞兵的方法........
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)