我一直试图制作一个能找到凯文培根的图形数据结构。我的退货声明无效,我有一个问题,我想知道问题可能是什么。这是我的代码,感谢您提前提供的任何帮助:
Promise.all()
我插入了几个puts语句来查看我的输出,当我运行它时,我得到以下内容:
require_relative "Node"
$films = []
$actors = []
def find_kevin_bacon(node, start)
$actors << start.name
if start.name == "Kevin Bacon"
puts "YES!"
return $films
end
if start.name != "Kevin Bacon"
puts "NO!"
start.film_actor_hash.each do |movie, actors|
if actors.include?(node)
puts "Its Him!"
$films << movie
find_kevin_bacon(node,node)
end
end
start.film_actor_hash.each do |movie, actors|
if $films.include?(movie) == false
actors.each do |act|
if $actors.include?(act) == false
$films << movie
find_kevin_bacon(node, act)
end
end
end
end
end
$films
end
所以代码表明&#34; Kevin Bacon&#34;被包含在其中一个节点的actor数组中,但不是结束方法而是继续进行。再次感谢您的帮助!
答案 0 :(得分:1)
在递归方法中,需要有一个&#34;基本情况&#34; - 它不会触发递归调用,而是返回一些东西。一种方法是:
$films
,在方法结束时返回nil。实际上,这是一种信号这种迭代没有找到解决方案的方法。在您运行find_kevin_bacon(node,node)
或find_kevin_bacon(node,act)
的地方,请执行以下操作:
result = find_kevin_bacon(node, node) # or node, act
return result if result
第二行不仅会停止循环,还会从整个方法返回。