Tribonacci序列Tn定义:
T0=0, T1=1, T2=1, n>=0时,Tn+3 = Tn + Tn+1 + Tn+2
限制条件是: 0<=n<=37, 32位整型。
我直接用C++撸了下面的代码,
1 |
|
提交答案后,提示”The Limit Exceeded”.
在自己服务器测试时,也发现当n=31之后的速度下降的非常快。
1 | # 编译 |
原因是当n越大时,直接使用递归会产生大量的重复计算,导致计算效率下降。为了解决该问题,需要维护一个已计算结果的字典,避免重复运算。
1 |
|
新的代码中,我预先定义了一个大小为100的数组,主要是因为题目限制n的取值,如果n没有限制取值,我会考虑使用vector容器或者map词典。其次考虑到n=0时,结果为0,并且数组初始化值为0,为了能够通过数组值是否为0来判断是否已经计算了相应的tribonacci值,我对结果加上了一个pseducount。
最后这段代码运行速度是0ms.
如果要用哈希字典,代码如下
1 |
|