微软算法100题27 跳台阶问题
27.跳台阶问题
题目:一个台阶总共有n 级,如果一次可以跳1 级,也可以跳2 级。
求总共有多少总跳法,并分析算法的时间复杂度
思路:通过数学归纳法
n=1 1
n=2 2
n=3 3
n=4 5
n=5 8
可知n>=3时 f(n)=f(n-1)+f(n-2) 是一个斐波那契数列, 该问题的时间复杂度也就是求斐波那契数列第N项的时间复杂度
n=3时需要计算2次, n=4时需要计算3次,n=5时需要计算5次,求斐波那契第N项的时间复杂度也是一个斐波那契数列,即O(n)=O(fib(n))
1 package com.rui.microsoft; 2 3 public class Test27_JumpStairs { 4 5 public static void main(String[] args) { 6 int total = jump(6); 7 System.out.println(total); 8 } 9 10 public static int jump(int n){ 11 if(n <= 0) return 0; 12 else if (n == 1) return 1; 13 else if (n == 2) return 2; 14 else{ 15 return jump(n-1) + jump(n-2); 16 } 17 } 18 }