青蛙跳台阶问题详解

问题背景:
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
问题解决思路
思路:首先考虑n等于0、1、2时的特殊情况,f(0) = 0 f(1) = 1 f(2) = 2其次,当n=3时,青蛙的第一跳有两种情况:跳1级台阶或者跳两级台阶假如跳一级,那么 剩下的两级台阶就是f(2);假如跳两级,那么剩下的一级台阶就是f(1),因此f(3)=f(2)+f(1)当n = 4时,f(4) = f(3) +f(2),以此类推…可以联想到Fibonacci数列 因此,可以考虑用递归实现。但是递归算法效率低下,也可考虑迭代实现。
递归解决:

int Fib(int n)  {  
    if (1 == n || 2 == n)  
        return n;
    else
	     return Fib(n - 1) + Fib(n - 2);  
    }  
} 

非递归解决:

public static int calc3(int n) {  
    if (1 == n || 2 == n)  
        return n;  
  
    int s1 = 1, s2 = 2, s3 = 1;  
    for (int i = 3; i <= n; i++) {  
        s3 = s1 + s2;  
        s1 = s2;  
        s2 = s3;  
    }  
    return s3;  
}  

猜你喜欢

转载自blog.csdn.net/cayman_2015/article/details/82785784
今日推荐