我目前正在研究这个代码战争皮萨诺时期。 我们需要返回斐波那契数列除以的周期长度。
我在youtube上搜索的python代码如下所示。另外值得注意的是,python 函数返回斐波那契序列的整个模版本而不是长度 这是 YouTube 视频,我从 Lets Python: Pisano
得到了这个答案def pisanoPython(divisor):
'''Returns a modulo version of the Fibonacci sequence'''
fib = [0,1]
while True:
fib.append((fib[-1]+fib[-2]) % divisor)
if fib[-1] == 1 and fib[-2] == 0:
return fib[:-2]
>>>pisano(3)
[0,1,1,2,0,2,2,1]
下面是我的代码(它给了我错误的输出)
function pisanoJavascript(n){
let fib = [0,1];
let isRepeated = true;
while(isRepeated) {
let lastVal = fib[fib.length-1]
let secondLastVal = fib[fib.length-2]
let remainder = (lastVal + secondLastVal) % n
fib.push(remainder)
if(lastVal === 1 && secondLastVal === 0) isRepeated = false
}
return fib.slice(0,-2).length
}
我遵循了 python 函数的逻辑和步骤,但无法弄清楚我缺少哪一部分。
我发现这条线
if(lastVal === 1 && secondLastVal === 0) isRepeated = false
。总是会命中并跳出 while 循环,所以也许我需要以不同的方式初始化 fib 数组。为什么这两个函数不一样,即使我遵循 pisanoPython
的逻辑以及如何使 javascript 版本工作
不知道为什么你的 javascript 代码与 pythin 有如此大的不同
这是1对1翻译
//def pisanoPython(divisor):
const pisano = (divisor) => {
// fib = [0,1]
const fib = [0, 1];
// while True:
while(true) {
// fib.append((fib[-1]+fib[-2]) % divisor)
fib.push((fib.at(-1)+fib.at(-2)) % divisor);
// if fib[-1] == 1 and fib[-2] == 0:
if (fib.at(-1) === 1 && fib.at(-2) === 0) {
// return fib[:-2]
return fib.slice(0, -2);
}
}
}
console.log(pisano(3)+'');