我怎样才能用javascript编写这个python函数?

问题描述 投票:0回答:1

我目前正在研究这个代码战争皮萨诺时期。 我们需要返回斐波那契数列除以的周期长度。

我在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 python arrays fibonacci
1个回答
0
投票

不知道为什么你的 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)+'');

© www.soinside.com 2019 - 2024. All rights reserved.