go语言递归实现爬楼梯问题

爬楼梯问题是一个经典的计算机科学问题,可以用递归方法来解决。该问题描述人站在一座有n级台阶的楼梯前,每次可以迈1步或2步,问走完这座楼梯共有多少种不同的走法。

当n为0或1时,只有一种走法;当n为2时,有两种走法;当n大于等于3时,假设走到第n级台阶有f(n)种走法,那么走到第n-1级台阶只有一种方式(迈一步),也就是f(n-1)种走法;走到第n-2级台阶有两种方式(分别迈一步和迈两步),也就是f(n-2)种走法。因此,f(n) = f(n-1) + f(n-2),这就是斐波那契数列的定义式。

递归方法的原理是将一个大问题拆分成一系列相似的小问题,并且通过递归调用自身,最终得到结果。对于爬楼梯问题,我们可以将它拆分成走到第n-1级台阶和走到第n-2级台阶两个子问题,通过递归调用自身,最终得到走到第n级台阶的方案数。需要注意的是,在实现递归方法时,需要设置一个终止条件,否则程序会一直递归下去,导致栈溢出等问题。在本例中,当n为0或1时,返回1即可作为终止条件。

package main

import "fmt"

// 一次性爬一个或两个楼梯,求爬n阶楼梯的有多少种方式
func main() {
	fmt.Println(stair_way(4))
}
func stair_way(n int) int {
	var ways int
	if n <= 0 {
		return 0
	} else if n == 1 {
		return 1
	} else if n == 2 {
		return 2
	} else {
		ways = stair_way(n-1) + stair_way(n-2)
		return ways
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值