39级台阶(竞赛题,Go语言实现)

WAPWO · · 1081 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

问题重现:

小明刚刚看完电影《第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)
}

 

本文来自:CSDN博客

感谢作者:WAPWO

查看原文:39级台阶(竞赛题,Go语言实现)

入群交流(和以上内容无关):Go中文网 QQ 交流群:798786647 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

1081 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传