递归三要素:
1、确定递归函数的参数和返回值
2、确定终止条件
3、确定单层递归的逻辑
第一题:斐波那切数列
class Solution {
public:
int Fibonacci(int n) {
int a1=0,a2=1;
return res(a1,a2,n);
}
int res(int a1, int a2, int num){
if(num == 0) return a1;
if(num == 1) return a2;
else
return res(a2, a1+a2, num-1);
}
};
第二题:跳台阶
class Solution {
public:
int jumpFloor(int number) {
return dp(number);
}
int dp(int n){
if(n == 1) return 1;
if(n == 2) return 2;
return dp(n-1) + dp(n-2);
}
};
第三题:跳台阶扩展问题
class Solution {
public:
int a=1;
int jumpFloorII(int number) {
int a1 = 1, a2 = 2;
return res(a1,a2,number);
}
int res(int a1, int a2, int number){
for(int i=1;i<number;i++)
a = a*2;
return a;
}
};
第四题:矩阵覆盖
class Solution {
public:
//规律:第0/1/2/3/4/5次对应(0,1,2,3,5,8)
int rectCover(int number) {
if(number == 0) return 0;
int a1 = 1, a2 = 2;
return res(a1,a2,number);
}
int res(int a1, int a2, int number){
if(number == 1) return a1;
if(number == 2) return a2;
return res(a2, a1+a2, number-1);
}
};