2015-11-30 3 views
0

Я предполагаю, что это связано с бесконечной рекурсией. Что я делаю не так? Моя цель - найти наименьшее число, которое равномерно делится цифрами 1-20.Базовая рубиновая рекурсия: уровень стека слишком глубокий (SystemStackError)

def smallest(n, count) 
    (2..n).each do |num| 
    if count % num != 0 
     count += 1 
     smallest(n, count) 
    end 
    end 
    return count 
end 

puts smallest(20, count=20) 
+0

err ... где вы ожидаете завершения этой рекурсии? 'count' будет продолжать расти ... – sevenseacat

+0

Я думал, что это закончится в заявлении return. Он достиг бы только выражения return, если каждое число делит одинаково на перечислимое. Неправильно ли эта логика? – Thrynn

+0

Я понимаю, что вы сейчас имеете в виду. Любые советы по созданию скрипта работают с минимальным количеством изменений? – Thrynn

ответ

0

Вы уверены, что вам нужна рекурсия в этом примере? Попробуйте код без использования smallest(n, count).

Кстати, этот алгоритм находит число, которое не равномерно делится цифрами 1-20.

+0

Будет работать нормально. Вы хотите вызвать эту функцию внутри цикла (block), но в каждом 'if' вы увеличили счетчик, что сделало невозможным завершение этой задачи. – PatNowak

+0

Я понимаю, что вы сейчас имеете в виду. Любые советы по созданию скрипта работают с минимальным количеством изменений? – Thrynn

+0

Просто используйте свой код без «наименьшего» вызова в цикле. Удалите эту строку и снова запустите. – PatNowak

Смежные вопросы