泰波那契序列 Tn 定义如下:
T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2
给你整数 n,请返回第 n 个泰波那契数 Tn 的值。
示例 1:
输入:n = 4
输出:4
解释:
T_3 = 0 + 1 + 1 = 2
T_4 = 1 + 1 + 2 = 4
示例 2:
输入:n = 25
输出:1389537
提示:
0 <= n <= 37
答案保证是一个 32 位整数,即 answer <= 2^31 - 1。
答案一:递归(正确,但超出时间限制)
int tribonacci(int n) {
if(n==0){
return 0;
}else if(n==1 || n==2){
return 1;
}else{
return (tribonacci(n-3) + tribonacci(n-2) + tribonacci(n-1));
}
}
答案二:数组(非递归,正确,但浪费存储空间)
int tribonacci(int n) {
if(n <= 2 && n >=0){
return n==0 ? 0:1;//三目运算符
}else{
int i;
int a[n+1];
a[0] = 0;
a[1] = a[2] = 1;
for(i = 3;i < n+1;i++){
a[i] = a[i -1] + a[i-2] + a[i-3];
}
return a[n];
}
}
答案三:非递归优化(局部变量替换数组,只保留前三项的值,每次计算完新的一项值后,更新一次前三项的值即可)
局部变量存放在栈中,只有在函数被调用时才动态地为变量分配存储单元
int tribonacci(int n) {
if(n <= 2 && n >=0){
return n==0 ? 0:1;//三目运算符
}else{
int t0 = 0,t1 = 1,t2 = 1;
int tmp = 0;
for(int j = 3;j < i + 1;j++){
tmp = t0 + t1 + t2;
t0 = t1;
t1 = t2;
t2 = tmp;
}
return tmp;
}
}