Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Как работает этот код?

def sum(a, b):
    if a == 0 or b == 0:
        return 2
    return 4 + sum(a-1, b-1)
print(sum(4,2))
Python
Gevorg Petrosyan
  ·   ·
Лучший
Фуллстек-разработчик и тимлид в большой корпорации  · 7 мая 2021

Судя по синтаксису это код на языке Python.

Оператор def объявляет новую функцию под названием sum. Эта функция принимает на вход два аргумента. Это означает, что над двумя объектами будет произведено некоторое вычисление и выдан результат.

Далее строчка после if это условный оператор. Она показывает, что код под ней будет выполнен тогда, когда по меньшей мере один из аргументов равен нулю. В таком случае функция просто вернёт в ответ число 2.

Следующая (четвёртая) строчка выполнится, если ни один из аргументов не равен нулю. В таком случае ответ будет равен 4 + результат выполнения такой же функции от аргументов, уменьшенных на единицу. Этот вызов называется рекурсия: возможность вызывать из функции саму себя. Такой вызов может идти в глубину на много уровней, пока не изменятся условия вызова (в данном случае пока один из аргументов не станет нулём). Если условия вызова не изменятся никогда, то программа вернёт специальную ошибку: переполнение стека. Но в примере выше такой ошибки не будет.

Функция будет прибавлять четвёрку до тех пор, пока один из аргументов не обратится в ноль, а потом к результату прибавит двойку. Последняя строчка выводит результат вызова этой функции для чисел 4 и 2.

sum(4,2) = 4 + sum(3,1) = 4 + (4 + sum(2,0)) = 4 + (4 + 2) = 10

На самом деле функция довольно бессмысленная, и использование рекурсии в данном случае не оправдано. Для отрицательных чисел функция вернёт ошибку переполнения стека. Для неотрицательных чисел результат будет равен минимальному из двух чисел, умноженному на 4, и ещё плюс 2. Максимальное из двух чисел вообще не играет никакой роли, хоть миллион можно туда поставить.