问题重现:
小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!
站在台阶前,他突然又想着一个问题:
如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?
请你利用计算机的优势,帮助小明寻找答案。
递归解决方案(Go语言实现)
package main import ( "fmt" ) /*递归核心 作者:天之 *@i表示爬楼梯次数 *@now表示当前所在楼层 *@top表示楼梯总层数 *@*count计满足条件的数 */ func f(i, now, top int, count *int) { if now == top { //最后必须迈右脚,0迈左脚,1迈右脚 //结束时i多加了1,故判断时和0比较 if (i&1) == 0 { (*count)++ } } else if now < top { f(i+1, now+1, top, count) f(i+1, now+2, top, count) } } func main() { var count int = 0 var top int = 39 //从键盘获取输入总级数 fmt.Scanf("%d", &top) f(0, 0, top, &count) fmt.Println(count) //让屏幕暂留 fmt.Scanf("%c", &top) fmt.Scanf("%c", &top) }
有疑问加站长微信联系(非本文作者)