gpt4 book ai didi

ruby - 递归解决方案没有正确迭代

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:32:04 25 4
gpt4 key购买 nike

我正在解决 Ruby 中的一个玩具问题:如何生成所有可能的 10 位电话号码,其中每个连续的数字都与键盘上的最后一个数字相邻。我已经表示了数字之间的相邻关系,并且有一个递归函数,但是我的方法并没有遍历整个解决方案空间。它只是找到第一个解决方案并返回。

这是我的代码:

adjacencies = { 1 => [2, 4],
2 => [1, 3, 5],
3 => [2, 6],
4 => [1, 5, 7],
5 => [2, 4, 6, 8],
6 => [3, 5, 9],
7 => [4, 8],
8 => [5, 7, 9, 0],
9 => [6, 8],
0 => [8]
}

def append_number(partial_phone_number, to_append, adjacencies)
phone_length = 10
partial_phone_number = partial_phone_number + to_append.to_s
if (partial_phone_number.length == phone_length)
return partial_phone_number
else
adjacencies[to_append].each do |a|
return append_number(partial_phone_number, a, adjacencies)
end
end
end

(0..9).each do |n|
puts append_number("", n, adjacencies)
end

这是我运行时的输出:

0852121212
1212121212
2121212121
3212121212
4121212121
5212121212
6321212121
7412121212
8521212121
9632121212

最佳答案

第一次进入 adjacencies[to_append].each 时,您会立即从方法中return,因此循环永远不会被执行超过一次。

你需要

  1. 返回一个电话号码列表,而不仅仅是一个电话号码
  2. 在递归调用中以某种方式构建该列表

关于ruby - 递归解决方案没有正确迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30846762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com