微软算法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 }

 

posted @ 2015-10-26 15:02  蟹粉小笼包  阅读(178)  评论(0编辑  收藏  举报