泰波那契序列 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
第一种递归
提交失败 超出时间限制
第二种非递归:
用数组保存前三项以及每一步计算结果,需要时可以直接取出
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]=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];
}
}
第三种 非递归优化
泰波那契数列中,新的一项需要借助前三项的值得到,例如T(6) = T(5)+T(4)+T(3),在第二种解法中,我们却将T(0)、T(1)、T(2)的值都存起来了,但是计算T(6)又用不到T(0)、T(1)、T(2),浪费了存储空间。对此,我们可以使用局部变量替换数组,只保留前三项的值,每次计算完新的一项值后,更新一次前三项的值即可。
void tribonaqi(int i)
{
if(i<=2)
return i==0?0:1;
else{
int t0=0,t1=1;t2=1;
int temp=0;
for(int j=3;j<i+1;j++)
{
temp=t0+t1+t2;
t0=t1; //进行更新
t1=t2;
t2=temp;
}
return temp;
}
}