标签: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