Почему «return 10» умножает десять, когда программа не go возвращает тест «else», когда n становится 1?
Это из-за n * test(n-1)
. Когда n становится 1, вы возвращаете 10, и рекурсия заканчивается. Так что n * test(1)
похоже на n * 10
. То же самое во втором случае (но с +
).
Рекурсия вызывает одну и ту же функцию несколько раз. Это легче понять с помощью различных функций. Вы возвращаете число и прекращаете возвращать функцию снова, чтобы предотвратить выполнение бесконечного кода (вы получите переполнение стека).
def test1(n):
if n == 1: #n is 3 not 1
return 10 #skipping
else: #what to do then
return n * test2(n-1) #return n times a value of another function, calling test2
def test2(n):
if n == 1: #n is 2 not 1
return 10 #skipping
else: #what to do then
return n * test3(n-1) #return n times a value of another function, calling test3
def test3(n):
if n == 1: #n is 1
return 10 #returning 10
else: #never called
return n * test4...(n-1)
print (test1 (3))
At test3
test3(n-1)
становится на 10
. test2(n-1)
становится равным n * test3(n-1)
, поэтому n * 10
, в данном случае 2 * 10
. И test1(n-1)
становится равным n * test2(n-1)
, поэтому n * n * 10
, в данном случае 1 * 2 * 10
.
Вы видите, что test1, test2 и test3 - это одни и те же функции, поэтому вы можете просто вызывать их без создания другой.