首页 > 解决方案 > JavaScript 递归未返回所需结果

问题描述

我有一个充满蓝图的对象。蓝图是另一个蓝图或成分的数组。我正在尝试显示构建“停滞设备”的路径,但输出缺少一些步骤。输出显示:

["Heat Capacitor",["Frost Crystal","Solanium"]]
["Poly Fibre",["Cactus Flesh","Star Bulb"]]
["Circuit Board",["Heat Capacitor","Poly Fibre"]]
-- missing output. see below --
["Quantum Processor",["Circuit Board","Superconductor"]]
["Lubricant",["Faecium","Gamma Root"]]
["Glass",["Frost Crystal"]]
["Living Glass",["Lubricant","Glass"]]
["Enriched Carbon",["Radon","Condensed Carbon"]]
["Nitrogen Salt",["Nitrogen","Condensed Carbon"]]
["Hot Ice",["Enriched Carbon","Nitrogen Salt"]]
-- missing output. see below --
["Cryo-Pump",["Hot Ice","Thermic Condensate"]]
["Cryogenic Chamber",["Living Glass","Cryo-Pump"]]
["Aronium",["Paraffinium","Ionised Cobalt"]]
["Mango-Gold",["Phosphorus","Ionised Cobalt"]]
["Grantine",["Dioxite","Ionised Cobalt"]]
["Iridesite",["Aronium","Mango-Gold","Grantine"]]
["Stasis Device",["Quantum Processor","Cryogenic Chamber","Iridesite"]]

在我预期的“量子处理器”之前

["Termic Condensate",["Sulphurine","Condensed Carbon"]
["Nitrogen Salt",["Nitrogen","Condensed Carbon"]]
["Semiconductor",["Thermic Condensate","Nitrogen Salt"]]
["Enriched Carbon",["Radon","Condensed Carbon"]]
["Super Conductor",["Semiconductor","Enriched Carbon"]]

在“低温泵”之前,我期望

["Termic Condensate",["Sulphurine","Condensed Carbon"]

代码如下,也位于 jsFiddle https://jsfiddle.net/shirha/7azgyu36/48/

<pre id="log"></pre><script>

const db = Object.create(null);
db.Valuables = JSON.parse(`{
"Aronium": ["Paraffinium","Ionised Cobalt"],
"Circuit Board": ["Heat Capacitor","Poly Fibre"],
"Cryo-Pump": ["Hot Ice","Thermic Condensate"],
"Cryogenic Chamber": ["Living Glass","Cryo-Pump"],
"Enriched Carbon": ["Radon","Condensed Carbon"],
"Glass": ["Frost Crystal"],
"Grantine": ["Dioxite","Ionised Cobalt"],
"Heat Capacitor": ["Frost Crystal","Solanium"],
"Hot Ice": ["Enriched Carbon","Nitrogen Salt"],
"Iridesite": ["Aronium","Mango-Gold","Grantine"],
"Living Glass": ["Lubricant","Glass"],
"Lubricant": ["Faecium","Gamma Root"],
"Mango-Gold": ["Phosphorus","Ionised Cobalt"],
"Nitrogen Salt": ["Nitrogen","Condensed Carbon"],
"Poly Fibre": ["Cactus Flesh","Star Bulb"],
"Quantum Processor": ["Circuit Board","Superconductor"],
"Semiconductor": ["Thermic Condensate","Nitrogen Salt"],
"Stasis Device": ["Quantum Processor","Cryogenic Chamber","Iridesite"],
"Super Conductor": ["Semiconductor","Enriched Carbon"],
"Termic Condensate": ["Sulphurine","Condensed Carbon"]
}`);

function analyse(recipe){
  let blueprint = db.Valuables[recipe];
  for(let i = 0; i < blueprint.length; i++){
    if(blueprint[i] in db.Valuables){
      analyse(blueprint[i]);
    }
  }
  log.innerHTML += JSON.stringify([recipe,blueprint])+"<br>";
}

log = document.getElementById('log');
analyse("Stasis Device");
</script>

这是我能做到的最接近的,而且不会让它变得更糟。谢谢你的帮助。

jsFiddle 已更正!谢谢大家。

标签: javascriptrecursion

解决方案


有几个拼写错误:

  • 超导体 → 超导体
  • 热冷凝水 → 热冷凝水

推荐阅读