递归函数溢出,为什么?

Chr*_*imm 1 recursion scala overflow

以下功能溢出,我不明白为什么.当使用x作为0,y作为0并且dim作为2运行时,结果应为6.但是,我收到一个错误,指示函数中的某些Long值(x或y)在溢出时为554.这不应该是可能的,因为x和y都受昏暗值限制,在我的测试中它被设置为2.这是代码:

def lattice(dim: Long, x: Long, y: Long): Long = { 
  if (x == dim && y == dim) {
    1
  }
  if (x >= dim) {
    lattice(dim,x,y+1L)
  }
  if (y >= dim) {
    lattice(dim,x+1L,y)
  }
  else {
    lattice(dim,x+1L,y) + lattice(dim,x,y+1L)
  }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

else在两个地方失踪了.这意味着你的最后一行甚至会在x >= dimx超过时运行dim.试试这个:

if (x == dim && y == dim) {
    1
} else if (x >= dim) {
    lattice(dim,x,y+1L)
} else if (y >= dim) {
    lattice(dim,x+1L,y)
} else {
    lattice(dim,x+1L,y) + lattice(dim,x,y+1L)
}
Run Code Online (Sandbox Code Playgroud)