Функция вычисления факториала ruby

программирование математика ruby

Столкнулся с непонятной проблемой при попытке реализации простой задачи. Нужно вычислить факториал числа, передаваемого параметром командной строки.

Пробовал несколько вариантов:
1) Мой

def fact(n)
if n == 0
f = 1
else
while n > 0
f *= n
n -= 1
end
f
end
end
puts fact(ARGV[0].to_i)

2)Вариант из книги "Руководство пользователя"

def fact(n)
if n == 0
1
else
n * fact(n-1)
end
end
puts fact(ARGV[0].to_i)

3) Вариант из Викиучебника

def fact n
f = 1
for i in 2..n
f *= i
end
f
end
puts fact(ARGV[0].to_i)

Во всех случаях вывод программы при любом значении n равен 1.

Примечание:
Версия ruby - 2.0.0

Примечание:
Если заменить строку

puts fact(ARGV[0].to_i)

на

a = gets.chop!.to_i
puts fact(a)

и вызывать без аргументов, то все работает.

А передаю аргумент я просто: fact.rb 5
Ответы:
Проще протестировать чем гадать.
➜  ~  cd work
➜  work  touch fact.rb
➜  work  nano fact.rb
➜  work  fact.rb 5
zsh: permission denied: fact.rb
➜  work  ruby fact.rb 5
120
➜  work  
не могу воспроизвести вашу ошибку


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.