爬樓梯
只有兩種上法,一級或者兩級
每走一步,都會面臨兩種選擇(上一級或者跳兩級),不管做出哪種選擇,都要遞迴把走完這步後的剩餘樓梯階數傳給下一次,繼續面臨兩種選擇
至於有多少種走法,必須是兩種選擇後產生的所有可能的總和
拿個最簡單的3級樓梯:
已知1級樓梯僅剩1種走法,2級樓梯僅剩2種走法,得:
1:第一次先走一級,那麼只剩下兩級,兩級樓梯僅剩兩種走法,所以返回2
2:第一次先走兩級,那麼只剩下一級,一級樓梯僅剩一種走法,所以返回1
所以**樓梯的全部跳法只有:2+1 = 3種,羅列出來:
第一種:1,1,1
第二種:2,1
第三種:1,2
所以思路就清晰了,每次遞迴都分兩種情況減少對應的步長,直到減到2或者1,再直接返回已知的走法,兩種情況加起來,就是n級階梯總的可能走法
公式:0, n<=0;
f(n) =
if(step <=2)
// 遞迴算出當前選擇跳1級的情況
int jump1 =
gugua_jump
(step-1)
;// 遞迴算出當前選擇跳2級的情況
int jump2 =
guagua_jump
(step-2)
;// 返回當前n級樓梯的兩種跳法的總和
return jump1 + jump2;
}main方法呼叫一下:
public
static
void
main
(string[
] args)
throws ioexception
這裡假設一共5級樓梯,按照什麼波的邏輯,5級= 4級+3級 = 5+3 = 8
看結果是不是:
那就對了,還有其他2種解法,聽說效率更優的,以後持續補充~
青蛙跳台階
乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。解題思路 1 如果兩種跳法,1階或者2階,那麼假定第一次跳的是一階,那麼剩下的是n 1個台階,跳法是f n 1 2 假定第一次跳的是2階,那麼剩下的是n 2個台階,跳法是f n 2 3 總跳法為 f n f n...
青蛙跳台階
之前面試遇到了這種題目,不會,後來搜尋了一下,感覺分析的很好 青蛙跳乙個n階的台階,每次可以跳1階或者2階,求跳完n階y有多少種方法。分析 n 1,f n 1 n 2,f n 2 n 3,f n 3 n 4,f n 5 可以發現 f n f n 1 f n 2 由此也可以推想 比如要跳到第4階樓梯上...
青蛙跳台階
難易程度 中等 題目描述 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。在不考慮青蛙健康狀況的情況下 求該青蛙跳上乙個n級的台階總共有多少種跳法。思路 在本題的描述中,青蛙的行動只有兩種可能 一次跳乙個台階或者兩個台階,設n階台階的跳法為 f n 如果第一次跳了一階,那麼剩下的n 1階的跳法為f n...