在这里整理一下递归数列的简单运用。
首先,写写用到的斐波那契数列 0 1 1 2 3 5 8 …
题目1:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。
这是一个很正常的一个斐波那契数列,没有任何变化。
public class Solution {
public int Fibonacci(int n) {
if(n<0){
return 0;
}else if(n==1||n==2){
return 1;
}else{
return Fibonacci(n-1) + Fibonacci(n-2);
}
}
}
题目2:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?
这里的斐波那契数列没有“0”,从“1”开始,要注意。
public class Solution {
public int JumpFloor(int target) {
if(target <= 0){
return 1;
}else if(target == 1){
return 1;
}else{
return JumpFloor(target - 1) + JumpFloor(target - 2);
}
}
}
题目3:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
作小小的运算后会发现,这也是一个斐波那契数列的运用。只不过n不能为0,这样,我们就要多写一项,而且这里的斐波那契数列为0 1 2 3 5 8…后面的一样。
public class Solution {
public int RectCover(int target) {
if(target <= 0){
return 0;
}else if ( target == 1 ){
return 1;
}else if ( target == 2 ){
return 2;
}else{
return RectCover(target - 1) + RectCover(target - 2);
}
}
}
题目4:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
这个其实也是斐波那契数列,只不过作了更多的递归运算。最总我们会发现一个奇妙的值,就是
f ( n ) = 2 * f ( n - 1 ) ( n > 1 )
public class Solution {
public int JumpFloorII(int target) {
if(target <= 0){
return 0;
}else if(target == 1){
return 1;
}else{
return 2*JumpFloorII(target - 1);
}
}
}