Сижу, читаю канал по питону. Замечаю вот такое:
Открываю сайт академии, там задачка, поправить эту рекурсию.
По комментариям к статье посоветовали более подробно описать задачу. На сайте Академии Яндекса она сформулирована вот так:

Вот варианты которые были предложены по нажатию кнопки «Исправить»

Выбрал последний вариант ответа. Получаю ответ, что выбрал неверно.
Ладно, открываем R, поехали проверять.
options(scipen=999)
factorial <- function(n) {
if(n==1) {
return(1)
}
return(n*factorial(n-1))
}factorial(2)
[1] 2
factorial(3)
[1] 6
factorial(4)
[1] 24
factorial(5)
[1] 120
factorial(6)
[1] 720
factorial(7)
[1] 5040
factorial(8)
[1] 40320
factorial(9)
[1] 362880
factorial(10)
[1] 3628800
factorial(11)
[1] 39916800
factorial(12)
[1] 479001600
factorial(13)
[1] 6227020800
factorial(14)
[1] 87178291200
factorial(15)
[1] 1307674368000
factorial(16)
[1] 20922789888000
factorial(17)
[1] 355687428096000
factorial(18)
[1] 6402373705728000
factorial(19)
[1] 121645100408832000Напоминаю, что это решение «не верное».
с точки зрения Академии яндекса вы выбрали неправильное решение # наше такое:
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)Хорошо, сейчас реализуем.
factorial_akademiya_yandeksa <- function(n) {
if(n==0) {
return(1)
}
return(n*factorial(n-1))
}
factorial_akademiya_yandeksa(2)
[1] 2
factorial_akademiya_yandeksa(3)
[1] 6
factorial_akademiya_yandeksa(4)
[1] 24
factorial_akademiya_yandeksa(5)
[1] 120
factorial_akademiya_yandeksa(6)
[1] 720
factorial_akademiya_yandeksa(7)
[1] 5040
factorial_akademiya_yandeksa(8)
[1] 40320
factorial_akademiya_yandeksa(9)
[1] 362880
factorial_akademiya_yandeksa(10)
[1] 3628800
factorial_akademiya_yandeksa(11)
[1] 39916800
factorial_akademiya_yandeksa(12)
[1] 479001600
factorial_akademiya_yandeksa(13)
[1] 6227020800
factorial_akademiya_yandeksa(14)
[1] 87178291200
factorial_akademiya_yandeksa(15)
[1] 1307674368000
factorial_akademiya_yandeksa(16)
[1] 20922789888000
factorial_akademiya_yandeksa(17)
[1] 355687428096000
factorial_akademiya_yandeksa(18)
[1] 6402373705728000
factorial_akademiya_yandeksa(19)
[1] 121645100408832000
Отличий по результату у «неверного» и «верного» решений не нашел.
То, что оба решения уходят в бесконечный цикл на отрицательных значениях это уже так, мелочи жизни, Как верно подметил @nulovkinif(n<2) return(1) ,проверка на тип int для n, на отрицательные значения? Всё это не нужно, какие мелочи.
И спасибо за комментарий @Tyusha:
«Вообще говоря, коль скоро исходная функция всегда возвращает ноль, то «исправление» это:
def factorial(n): return 0
Кто его знает, может быть цель именно такая?»
Похоже эти «Академики» не сильно хорошо разбираются в рекурсиях? Не стал бы я доверять им свою карьеру.
ссылка на оригинал статьи https://habr.com/ru/articles/737602/
Добавить комментарий