gpt4 book ai didi

ruby : stack level too deep (SystemStackError)

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

我尝试解决这个问题http://www.nattee.net/~dae/algo/prob/hw03b_tiling/problem.pdf

所以我使用分而治之的方法来解决它但是当我执行我的程序时我得到了

tile.rb:7: stack level too deep (SystemStackError)

这是我的代码

def tile (x, y, bx, by, ex, ey)
mx = (bx+ex)/2
my = (by+ey)/2

if (by<=y && y<=my)
if (bx<=x && x<=mx) # top-left
puts "0 #{mx} #{my}"
elsif (mx+1<=x && x<=ex) # top-right
puts "1 #{mx} #{my}"
end
elsif (my+1<=y && y<=ey)
if (bx<=x && x<=mx) # bottom-left
puts "2 #{mx} #{my}"
elsif (mx+1<=x && x<=ex) # bottom-right
puts "3 #{mx} #{my}"
end
end

tile(x,y,bx,by,mx,my) #top-left
tile(x,y,mx+1,by,ey,my) #top-right
tile(x,y,bx,my+1,mx+1,ey) #bottom-left
tile(x,y,mx+1,my+1,ex,ey) #bottom-right

if ex-bx == 2 && ey-by == 2 then return end
end

temp = []
gets.chomp.strip.split(" ").each do |item|
temp << item.to_i
end

L = temp[0]
x = temp[1]
y = temp[2]

tile(x,y,0,0,L-1,L-1)

我找不到原因。

最佳答案

没有办法摆脱你的递归 - 每次调用 tile,它都会再调用 4 次 tile。递归在递归调用之前总是需要一个“泄压阀”出路。尝试在 tile 调用之前将您的 return 上移。

return 语句可以用更惯用的 ruby​​ 编写。

尝试:

return if (ex-bx == 2 && ey-by == 2)

关于 ruby : stack level too deep (SystemStackError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25849100/

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