一共有5個台階,每一次可以跳乙個或兩個台階。
思路:設完成跳台階的函式是jump(5)
完成這個動作最後可能有
最後跳了一下就跳完了;
最後跳了兩下就跳完了;
1——它的位置在第四個台階,跳到這裡要jump(4);
2——它的位置在第三個台階,跳到這裡要jump(3);
所以在這種情況下jump(5)=jump(4)+jump(3).
我們再將總共的台階數看成n個
最後可能情況為
最後跳了一下就跳完了;
最後跳了兩下就跳完了;
與上一種情況相同;
jump(n)=jump(n-1)+jump(n-2)
(注意當n=1時有一種方法,n=2時有兩種方法作為結束遞迴的出口)
//這裡討論1或2的原因
eg:n=3時=jump(2)+jump(1);如果不考慮n=2有兩種情況
jump(2)=jump(1)+jump(0)=1但實際上n=2時有兩種情況,會出現錯誤。
對應**實現為
觀察輸出結果
發現是斐波那契數。
一共n個台階,每次可以跳1,2,3到n個台階。
根據上面的分析
最後可能的情況為:
剩乙個,剩兩個…剩n個;
//剩n個到此位置的方法為0;jump(0)=0
jump(n)=jump(n-1)+jump(n-2)…+jump(0);——1
———————一共n個———————
對應jump(n-1):
jump(n-1)=jump(n-2)+…jump(0);——2
1式與2式聯立求解
jump(n)=jump(n-1)+jump(n-1)=2*jump(n-1);
對應**:
輸出結果
有n個台階,每次可以跳1,2,3…m個台階
因為m與n的大小未知所以要討論
當m>=n時
跳到最後的可能情況:
剩n個,剩n-1個,…剩1個;
所以這種情況和第二種相同,
jump(n)=2*jump(n-1)
當m跳到最後可能的情況
剩m個跳完——在此位置可能情況jump(n-m)
剩m-1個跳完——位置可能情況jump(n-(m-1))
…剩乙個跳完——可能情況jump(n-1)
此時jump(n)=jump(n-1)+jump(n-2)…+jump(n-m);
jump(n-1)=jump(n-2)…jump(n-m)+jump(n-m-1);
聯立求解
jump(n)=jump(n-1)+jump(n-1)-jump(n-m-1);
jump(n)=2*jump(n-1)-jump(n-m-1);
對應**
輸出結果
C語言 遞迴解決青蛙跳台階問題
目錄 乙隻青蛙一次可以跳1級或2級台階,求當台階數為n時青蛙有多少種跳法。台階的數量為n。當 n 1 時,青蛙有一種跳法,即跳1級台階。當 n 2 時,青蛙有兩種跳法,即跳兩次1級台階或跳一次2級台階。當 n 3 時,青蛙可以先跳2級台階再跳1級台階,也可以選擇先跳1級台階再跳2級台階,或者是跳三次...
青蛙跳台階問題(C語言)
題目描述 乙隻青蛙一次可以跳上1級台階,也可以跳上2級 它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。題目分析 分析思路 青蛙對每級台階可選擇過或者不過 換個角度來看,題目的問題等價於,青蛙現在在起點n 0處。目標是n n處。那麼經過序號1,2,3 n 1層台階。對於每一層台階,都可...
青蛙跳台階最簡單的遞迴解法
爬樓梯 只有兩種上法,一級或者兩級 每走一步,都會面臨兩種選擇 上一級或者跳兩級 不管做出哪種選擇,都要遞迴把走完這步後的剩餘樓梯階數傳給下一次,繼續面臨兩種選擇 至於有多少種走法,必須是兩種選擇後產生的所有可能的總和 拿個最簡單的3級樓梯 已知1級樓梯僅剩1種走法,2級樓梯僅剩2種走法,得 1 第...