【发布时间】:2017-05-03 21:43:25
【问题描述】:
我想做这个简单的计算,但它抱怨堆栈不够深,即使对于 n 的非常小的数字,例如 4。类似主题的其他 SO 帖子建议使用尾递归,但这不适用在这里,因为您只在达到基本情况时才添加累积值。
RubyVM::InstructionSequence.compile_option = {
:tailcall_optimization => true,
:trace_instruction => false
}
def recursively_count_paths(x , y, n)
if x == n && y == n
return 1
puts " we got a path people"
elif x == n
puts "x is done"
return recursively_count_paths(x, y + 1, n)
elif y == n
puts "y is done"
return recursively_count_paths(x + 1, y, n)
else
return (recursively_count_paths(x + 1, y, n) +
recursively_count_paths(x, y + 1, n))
end
end
recursively_count_paths(0, 0, 20)
在其他情况下我不应该返回吗?
【问题讨论】:
-
puts永远不会在第一个if条件下执行 -
@Ruslan 是真的。但这与问题是正交的。
-
elsif 而不是 elif?我没有在 RubyVM 上运行它,所以我不确定这会有所不同
-
@MickeySheu 是的!
-
如果你在进行寻路,有许多算法被证明是有效的,而且不会超出你的堆栈限制。我认为你使用的这个重复了很多工作,也很浪费。
标签: ruby