C語言 函式的遞迴 青蛙跳台階(三種情況)

2021-10-17 09:33:48 字數 2029 閱讀 9786

一共有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 第...