我尝试解决以下比赛:
考虑使用以下算法生成无限序列a的十进制数字:
- 最初给出前五个数字;
- 对于i > 4, a[i] = (a[i - 5] + a[i - 4] + a[i - 3] + a[i - 2] + a[i - 1]) % 10,即从第五个元素开始,每个元素都是前五个元素模10的和。
我需要找到序列的第n个元素(第一个元素的索引为0)。
我的尝试如下:
while(a.length <= n){
var sum = a.slice(-5).reduce((a, b) => a+b, 0);
a.push(sum % 10);
}
return a.pop()
对于小的n
值,它可以工作,但当测试有大数(如521687676)时就无法正常工作。
我是否漏掉了什么?我猜可以推导出一个公式而不是使用循环。