
Сижу, читаю канал по питону. Замечаю вот такое:

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

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

Выбрал последний вариант ответа. Получаю ответ, что выбрал неверно.
Ладно, открываем 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
Кто его знает, может быть цель именно такая?"
Похоже эти "Академики" не сильно хорошо разбираются в рекурсиях? Не стал бы я доверять им свою карьеру.