ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

可能是全网最憨的青蛙跳台阶解法........

2021-08-22 17:05:16  阅读:166  来源: 互联网

标签:递归 全网 jump print step num ........ now 解法


记录一下 太憨了.....

原题目(同事发过来的)

 

 

 递归解法

 

 

 

下面这个是本人的憨批源代码

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:好伞兵的方法........  

标签:递归,全网,jump,print,step,num,........,now,解法
来源: https://www.cnblogs.com/missyun/p/15172759.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有