Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby返回语句不工作_Ruby_Recursion_Data Structures_Graph_Return - Fatal编程技术网

Ruby返回语句不工作

Ruby返回语句不工作,ruby,recursion,data-structures,graph,return,Ruby,Recursion,Data Structures,Graph,Return,我一直在尝试制作一个可以找到kevin bacon的图形数据结构。我的返回声明不起作用,我想知道可能是什么问题。这是我的代码,感谢您提前提供的帮助: require_relative "Node" $films = [] $actors = [] def find_kevin_bacon(node, start) $actors << start.name if start.name == "Kevin Bacon" puts "YES!" return

我一直在尝试制作一个可以找到kevin bacon的图形数据结构。我的返回声明不起作用,我想知道可能是什么问题。这是我的代码,感谢您提前提供的帮助:

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

因此,代码表明“Kevin Bacon”包含在一个nodes actors数组中,但它并没有结束继续进行的方法。再次感谢您的帮助

在递归方法中,需要有一个“基本情况”——它不触发递归调用,而是返回一些内容。一种方法是:

NO!
NO!
NO!
NO!
Its Him!
YES!
NO!
NO!
NO!
NO!
NO!
Chappie
X2
Robots
Footloose
Robots
X2
Chappie
Lion
Bewitched
  • 在方法末尾返回nil,而不是
    $films
    。实际上,这是一种表示迭代没有找到解决方案的方法
  • 在运行
    find\u kevin\u bacon(节点,节点)
    find\u kevin\u bacon(节点,动作)
    的地方,请执行以下操作:

    result = find_kevin_bacon(node, node) # or node, act
    return result if result
    
    第二行不仅会停止循环,还会从整个方法返回


  • 我使用了你建议的第二个选项,它起了作用,所以谢谢你。不过我很好奇,所以我的理解是,如果返回结果if result的格式是return“code”if“condition”。那么“条件”如何等于true呢?通常情况下,您不需要比较if语句中的某些内容来获得布尔值true或false吗?该列表不是两个选项。这两部分都是必要的。