可能是全網最憨的青蛙跳臺階解法........
阿新 • • 發佈:2021-08-22
記錄一下 太憨了.....
原題目(同事發過來的)
遞迴解法
下面這個是本人的憨批原始碼
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同理else: num += 1 print("相等時候的i:%s" % (i)) breakA1: 最後在函式結束的最後流程自減 因為能夠正常結束當輪函式 只有兩種情況 要麼滿足if 已經回到了上一輪 要麼滿足elif 滿足最後一輪相等 當然 都不滿足的時候自減自然是沒問題的 而前兩種情況都是要加完之後要減的 所以直接放到最後 取消使用else break 就可以解決了 算是警醒自己 這種情況不要使用全域性 太容易出問題了 Q2: 少一種情況 也就是第一次就全部跳完的情況 A2: 呃......最後加一就可以了 總結: 還是數學方法簡單 數學 YYDS PS:好傘兵的方法........