我试图用Ruby编写Euclid GCD算法。
def euclid(m, n)
n == 0 ? m : euclid(n, m % n)
end
对于我尝试过的任何输入,我都会遇到相同的错误:stack level too deep (SystemStackError)
我认为我需要帮助理解脚本语言中的递归。
答案 0 :(得分:2)
您的代码没问题,只需删除euclid (
到euclid(
之间的空白
def euclid(m, n)
n == 0 ? m : euclid(n, m % n)
end
答案 1 :(得分:1)
除了处理修复递归调用的解决方案之外,如果有帮助,euclid算法的优点在于它具有尾递归,即,您可以将其转换为迭代解决方案。
def euclid(m, n)
while n != 0
t = n
n = m % n
m = t
end
m
end
答案 2 :(得分:0)
该错误是由于对于euclid
的输入,该函数必须调用自身太多次并且堆栈内存不足。如果堆栈上有无限的内存,您的实现将正常工作。请注意您的euclid
版本如何适用于小输入。可以通过使用迭代来解决问题:
def euclid(m, n)
m, n = n, m % n until n == 0
m
end