1.输出斐波那契数列的第n项。
直接上代码:
public class Fibonacci {
public static int fibonacci(int n){
if(n==0){
return 0;
}
if(n==1){
return 1;
}
if(n==2){
return 1;
}
return fibonacci(n-1)+fibonacci(n-2);
}
}
2.跳台阶问题。
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种方法?
思路:第一次跳的是1阶,剩下的是n-1个台阶,跳法是f(n-1),第一次跳的是2阶,剩下的是n-2个台阶,跳法是f(n-2),f(n)=f(n-1)+f(n-2)。
public class 跳台阶 {
public int jump(int n){
if(n==0){
return 0;
}
if(n==1){
return 1;
}
if(n==2){
return 2;
}
return jump(n-1)+jump(n-2);
}
}
3.变态跳台阶问题。
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路:可以分解为:f(n)=f(n-1)+f(n-2)+f(n-3)+……+f(n-(n-1))+f(n-n),可以递归但是感觉很恶心,运行起来栈深度太深。
化简一下,f(n-1)=f(0)+f(1)+f(2)+f(3)+……+f(n-2)。
即:f(n)=f(0)+f(1)+f(2)+f(3)+……+f(n-2)+f(n-1)
f(n-1)=f(0)+f(1)+f(2)+f(3)+……+f(n-3)+f(n-2)
由上可知,f(n)=2*f(n-2);
public class 变态跳台阶 {
public int jump2(int n){
if(n==0){
return 0;
}
if(n==1){
return 1;
}
return 2*jump2(n-1);
}
}