Я пытаюсь написать программу для создания факториалов. Я сделал это:'*' не может быть принудительно введен в Fixnum (TypeError)
continue_loop=true
def fact(n)
if n==0
1
else
n*fact(n-1)
end
end
while continue_loop
puts "Welcome to the factorial machine. Write a number! Write exit to exit the program"
user=gets.chomp
if user=="exit"
continue_loop=false
else puts fact(user.to_i)
puts "--------"
end
end
я * can't be coerced into Fixnum(TypeError)
на линиях:
n*fact(n-1)
и
else puts fact(user.to_i)
я обнаружил, что я получаю эту ошибку, потому что правая сторона n*fact(n-1)
является nil
. Но тогда я не вижу, как я могу сделать рекурсию.
Это можно сделать с помощью inject
, но я хотел бы научиться использовать рекурсию.
Ваша программа кажется прекрасной, я просто скопировал ее, и она отлично работала. Не могли бы вы попытаться воспроизвести это в онлайн-интерпретаторе? https://repl.it/languages/ruby –
Что вы хотите сказать? – sawa
@sawa Спасибо за исправление и извините за свои ошибки, английский не мой родной язык, и, как вы можете видеть, я совершенно новый для программирования). Я постараюсь не делать их в будущих вопросах (а также в том числе и в актуальном вопросе). – Lenok