Ruby返回语句不起作用

时间:2017-06-02 23:46:17

标签: ruby recursion data-structures graph return

我一直试图制作一个能找到凯文培根的图形数据结构。我的退货声明无效,我有一个问题,我想知道问题可能是什么。这是我的代码,感谢您提前提供的任何帮助:

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数组中,但不是结束方法而是继续进行。再次感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在递归方法中,需要有一个&#34;基本情况&#34; - 它不会触发递归调用,而是返回一些东西。一种方法是:

  1. 而不是$films,在方法结束时返回nil。实际上,这是一种信号这种迭代没有找到解决方案的方法
  2. 在您运行find_kevin_bacon(node,node)find_kevin_bacon(node,act)的地方,请执行以下操作:

    result = find_kevin_bacon(node, node) # or node, act
    return result if result
    

    第二行不仅会停止循环,还会从整个方法返回。