1.递归
# 递归 def fibs(n): if n < 1: return 0 elif n == 1: return 1 return fibs(n - 2) + fibs(n - 1) print(fibs(6))
2.循环
# 循环 def fibs(n): a = [1, 1] for i in range(n - 2): a.append(a[-2] + a[-1]) return a[n-1] print(fibs(6))
class Solution: def fib(self, n): if n==1 or n==2: return n a=1;b=2;c=3 for i in range(3,n+1): c=a+b;a=b;b=c return c
3.组合数公式
设青蛙跳上n级台阶一共跳了z次,其中有x次是一次跳了两级,y次是一次跳了一级,则有z=x+y ,2x+y=n,对一个固定的x,利用组合可求出跳上这n级台阶的方法共有
种方法
又因为 x在区间[0,n/2]内,所以我们只需要遍历这个区间内所有的整数,求出每个x对应的组合数累加到最后的结果即可
class Solution: def climbStairs(self, n): def fact(n): result=1 for i in range(1,n+1): result*=i return result total=0 for i in range(n/2+1): total+=fact(i+n-2*i)/fact(i)/fact(n-2*i) return total