从递归调用返回

时间:2014-12-12 17:42:02

标签: ruby recursion

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

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]

1 个答案:

答案 0 :(得分:2)

而不仅仅是:

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会这样做。