Тест на знание функций

Пройти тест

Задания в классе

Тема занятия - рекурсивные функции. Поэтому во всех заданиях запрещено использовать цикл for и while.

<aside> 🤔 Человеку свойственна итерация, рекурсия – удел богов. (James O. Coplien, Bell Labs)

</aside>

Факториал

$$ n!= \begin{cases} 1 & n = 0,\\ n \cdot (n-1)! & n > 0. \end{cases} $$

Если в лоб записать определение факториала на python, то получится линейно рекурсивная функция.

def factorial(n):
    if n == 0:
        return 1

    return n * factorial(n-1)

print(factorial(10) == 3628800)

Нарисуйте на доске процесс вычисления факториала. У вас должна получиться серия расширений, а потом сжатий отложенных операций.

Этот процесс расширения и сжатия называется рекурсивным процессом. В случае с факториалом мы имеем дело с линейнорекурсивным процессом, так как объем информации, требуемый для запоминания отложенных операций растет линейно.

Фибоначчи

Этот вид рекурсии называется древовидным. Нарисуйте процесс порождаемый при вычислении F(5) и вы увидите, что он напоминает дерево. Как вы думаете на сколько это оптимальный процесс?

$$ F = \begin{cases} F(0)=1; \\ F(1) = 1; \\ F(n) = F(n-1) + F(n-2),\quad n > 1. \end{cases} $$

Maximum

Поиск максимального элемента в коллекции

maximum(1, 3, 2, 6, 5, 1) == 6

Summa

Сумма цифр числа рекурсивным методом.

summa(1234) == 1 + 2 + 3 + 4 == 10