【问题标题】:Return from a recursive call从递归调用返回
【发布时间】:2014-12-12 17:42:02
【问题描述】:

如何将结果正确返回给调用函数:

arr_of_arr = [ [1,2,3], [4,5,6], [7,8,9] ]

def find_all(arr, pos, result)
  if pos == arr.size
    puts result
  else
    curr_set = arr[pos]
    curr_set.each {|e|
      find_all(arr, pos+1, result+e.to_s)
    }
  end
end

print find_all(arr_of_arr, 0, "")

此代码产生以下输出:

147 148 149 157 158 159 167 168 169 247 248 249 257 258 259 267 268 269 347 348 349 357 358 359 367 368 369 [1、2、3]

【问题讨论】:

  • 您要寻找的结果是什么?

标签: ruby recursion


【解决方案1】:

而不是简单地:

puts result

返回 nil。

同样返回结果:

puts result
result

此外,您可能希望在each 语句中获取结果,例如:

curr_set.inject([]) { |res, e|
  res.concat find_all(arr, pos+1, result+e.to_s)
  res
}

(或者中断,如果这是您的意图 - 在这方面问题根本不清楚。)

最后,如果您要使用 print 语句调用它,则使用 puts 不一定是您想要的:简单的 result 就可以了。

【讨论】:

  • +5 表示答案; +5 用于破译问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 2014-06-04
  • 2014-09-10
  • 2018-03-19
  • 1970-01-01
  • 2013-12-12
  • 1970-01-01
相关资源
最近更新 更多