1: 斐波那契数列问题
斐波那契数列问题描述:
F(0) = 0, F(1) = 1,
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
int fib(int n){
if (n < 0)
return -1;
if (0 == n)
return 0;
else if (n <= 2)
return 1;
long long lesser = 0, bigger = 1, res; //lesser=f(n-2), bigger=f(n-1)
int current_n = 1;
while (current_n < n) {
current_n++;
res = (lesser + bigger) % 1000000007; //每一步的和都得取余
lesser = bigger;
bigger = res;
}
return res;
}
2: 青蛙跳台阶问题
青蛙跳台阶问题描述:
F(0) = 0, F(1) = 1, F(2) = 2
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.//和斐波那契数列问题相比,从F(2)开始,值不一样但是F算法一样
int numWays(int n){
if (n < 0)
return -1;
if (0 == n)
return 1;
else if (1 == n)
return 1;
long long lesser = 1, bigger = 1, res;
int current_n = 1;
while (current_n < n) {
current_n++;
res = (lesser + bigger) % 1000000007; //每一步的和都得取余
lesser = bigger;
bigger = res;
}
return res;
}