码迷,mamicode.com
首页 > 其他好文 > 详细

计算爬楼梯的走法

时间:2020-06-04 13:55:56      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:print   用两个   func   ack   ret   中间   air   i++   ESS   

对于一个给定步数的楼梯,一次可以向前走一步或者两步,计算有多少种走法

如果使用递归的方法计算,那么会很容易,就是func(n-1)+func(n-2),但是当楼梯步数很多的时候,这个方法是不行的,但是我们可以借鉴他的思想,就是对于有n阶的楼梯,他的走法等于n-1阶楼梯的走法加上n-2阶楼梯的走法。

所以为了避免当N很大的时候难以计算,我们使用两个变量存储中间结果,第一个变量是n-1阶楼梯的走法数量,第二个变量是n-2阶楼梯的走法数量

package main

import "fmt"

// 给定一个步数的楼梯,每次可以选择向前走一步或者两步,计算一共有多少种走法

func main() {
	fmt.Println(climbStairs(2))
	fmt.Println(climbStairs(3))
	fmt.Println(climbStairs(4))
	fmt.Println(climbStairs(5))
}

func climbStairs(n int) int {
	twoStepLess, oneStepLess := 1, 2
	if n < 3 {
		return n
	}
	for i := 3; i <= n; i++ {
		tmp := twoStepLess + oneStepLess
		twoStepLess = oneStepLess
		oneStepLess = tmp
	}
	return oneStepLess
}

  这个思路其实和递归反着来的,递归算法是从n计算到1或者2,这个算法就是从1或者2计算到n

计算爬楼梯的走法

标签:print   用两个   func   ack   ret   中间   air   i++   ESS   

原文地址:https://www.cnblogs.com/gyyyl/p/13042737.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!