"Уровень стека слишком глубокий" с функцией Акермана в Ruby

Я использую Ruby v1.9.1 для написания программы с функцией Акермана для моего класса в университете. Код следующий:

def ackermann(n,m)
  if n == 0 && m > 0
    return m+1
  elsif n > 0 && m == 0
    return ackermann(n-1,1)
  elsif n > 0 && m > 00
    return ackermann(n-1,ackermann(n,m-1))
  else
    puts "Wrong input, m and n must be higher than 0"
  end
end

puts ackermann(5,5)

Это высоко рекурсивная функция. Поэтому я получаю ошибку «слишком глубокий уровень стека (SystemStackError)». Есть ли какой-либо способ или обходной путь для исправления этой ошибки?

5
задан rotespferd 5 November 2011 в 19:13
поделиться