首页 > 解决方案 > 斐波那契数列从 JavaScript 到 Python 的递归记忆

问题描述

我正在从 freecodecamp youtube 学习动态编程。我是一名 python 程序员,本教程遵循 Javascript。当我将代码从 JS 翻译成 python 时,我发现我得到了不同的输出(错误)。

这是该教程视频中的代码 - Javascript:

这是视频的链接https://youtu.be/oBt53YbR9Kk?t=5290

const canSum = (targetSum, numbers, memo={}) => {
  if (targetSum in memo) return memo[targetSum];
  if (targetSum ===0) return true;
  if (targetSum < 0) return false;

  for (let num of numbers){
    const remainder = targetSum - num;
    if (canSum(remainder, numbers, memo) === true){
      memo[targetSum] = true;
      return true;
    }
  }
  memo[targetSum] = false;
  return false;
}

console.log(canSum(7,[2,3]))
console.log(canSum(7,[5,3,4,7]))
console.log(canSum(7,[2,4]))
console.log(canSum(8,[2,3,5]))
console.log(canSum(30,[7,14]))

输出是

true 
true
false
true
false

我在 python 中为相同的代码是:

def canSum(targetSum, numbers, memo={}):
    if targetSum in memo: return memo[targetSum]
    if targetSum == 0: return True
    if targetSum <0: return False
    for num in numbers:
        remainder = targetSum - num
        if canSum(remainder,numbers,memo) == True:
            memo[targetSum] = True
            return True
    memo[targetSum]=False
    return False


print(canSum(7,[2,3]))
print(canSum(7,[5,3,4,7]))
print(canSum(7,[2,4]))
print(canSum(8,[2,3,5]))
print(canSum(30,[7,14]))

输出是

True
True
True
True
True

如您所见,不同语言的输出不同,为什么会这样?还是我犯了什么错误?任何人都可以帮忙吗

标签: javascriptpythonpython-3.xfibonaccimemoization

解决方案


推荐阅读