我看这个递推公式是f(1)=2,f(2)=2, f(n)=3f(n-1)-2f(n-2)
要求的则是f(1)+f(2)+...+f(n)
出现OT的缘故是因为你有太多的重复运算。你做数列f(n)的时候就用到了f(n-1)和f(n-2),而为了算f(n-1)又不得不算f(n-2)和f(n-3)。仅到这里f(n-2)就已经重复两遍了,在往下递推还会有更多的重复运算,而这么多的重复运算仅仅是在main()函数中计算f(n)这1个值的。等你算f(n-1)的时候会发现其实f(n-1)已经在f(n)的求解过程中算过了,但是现在不得不再重复算一遍,又是一波重复计算...
这样累计起来,OT是正常的。
建议从f(1),f(2)算起,然后每一步都保留最近两次的计算结果进行直接运算,可以把时间降到O(n)的级别。
如果待测试的数据组数非常多,你应该考虑将前n项的结果缓存进数组里,如果测试落在已经测得的区间,就直接返回结果,否则才继续运算
否则你这重复运算次数太多了
你这个计算量太大了,自然如此,可以简化后使用迭代
首先使用高中知识化简一下an-a(n-1)=2(a(n-1)-a(n-2))就是一个等比数列,
令 b初始值为a2-a1=1,a初始值为a1,sum=a1
for i : 1->n-1
{a+=b
sum+=(a%9973)
b*=2}
然后输出sum%9973即可