javascript - 斐波那契数列从 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
如您所见,不同语言的输出不同,为什么会这样?还是我犯了什么错误?任何人都可以帮忙吗
解决方案
推荐阅读
- javascript - 将 react-datepicker css 加载到 jsx 文件中的问题
- python - 当 A 是条纹矩阵时,如何使用 scipy.linalg.solve_banded 求解 Ax = b?
- html - 具有不透明度值的悬停背景和具有不透明度不同值的悬停按钮
- jenkins - 失败的 Git 和 Github 插件及其在 Jenkins 中的依赖项安装
- php - 如何使用内部联接从两个日期之间的数据库中获取数据?
- python-3.6 - 尝试安装到 virtualenv 时出现 Pipenv 错误
- android - SecurityException:调用者不再运行,上次停止
- maven-3 - 如何解决“产品不包含强制属性'版本'。请确保您在产品文件中输入了版本”
- javascript - 无法从滚动条中选择视频的搜索时间
- javascript - 错误:捆绑失败:TypeError:无法读取 null 的属性“绑定”