У нас есть эта рекурсивная программа на Python:
def tri_recursion(k):
if (k > 0):
result = k + tri_recursion(k - 1)
print(result)
else:
result = 0
return result
print("\n\nRecursion Example Results")
tri_recursion(6)
Насколько я понимаю, вывод этой программы должен был быть:
1,3,5,7,9,11
Но фактический результат:
1,3,6,10,15,21
Может ли кто-нибудь объяснить причину этого? Насколько я понимаю, программа запустится как
k as 6, then 6 > 0 then system will call tri_recusrion(6-1)
now k is 5, then 5 > 0 then system will call tri_recusrion(5-1)
now k is 4, then 4 > 0 then system will call tri_recusrion(4-1)
now k is 5, then 3 > 0 then system will call tri_recusrion(3-1)
now k is 2, then 2 > 0 then system will call tri_recusrion(2-1)
now k is 1, then 1 > 0 then system will call tri_recusrion(1-1)
now k is 0, then 0 !> 0 condition will break
now function will start to return in reverse order:
tri_recusrion(1-1) in this case k is 1; k + (1-1) prints 1
tri_recusrion(2-1) in this case k is 2; k + (2-1) prints 3
tri_recusrion(3-1) in this case k is 3; k + (3-1) prints 5
tri_recusrion(4-1) in this case k is 4; k + (4-1) prints 7
tri_recusrion(5-1) in this case k is 5; k + (5-1) prints 9
tri_recusrion(6-1) in this case k is 6; k + (6-1) prints 11






Каждый раз, когда функция вызывается сама по себе, она добавляет текущее значение k к result. Текущий список, который вы печатаете, это 1, 1+2, 1+2+3, 1+2+3+4, ..., который также является 1, 3, 6, 10, .... Чтобы исправить ошибку, напишите result = 1 и result = 2 + tri_recursion(k - 1) вместо result = 0 и result = k + ... соответственно.
Вопрос не требует исправлений, он нуждается в пояснении.
Позвольте мне сначала объяснить, что делает эта функция:
k — аргумент функции, базовое условие — когда k равно 0, результат равен 0 и ничего не печатается, функция просто возвращает 0
Если k больше 0, программа вычисляет tri_recursion(k-1), добавляет его к k и печатает, а затем возвращает.
Если мы вызовем функцию с аргументом k=6, она вызовет ту же функцию с k=5, затем она сделает то же самое с k=4 ... и, наконец, вызовет себя с k=0, и программа перестанет вызывать себя. После этого рассчитанный результат будет перенесен на вызов на один уровень раньше, чтобы завершить этот вызов.
Таким образом, шаги, которые нужно выполнить сразу после достижения программы k=0, следующие.
Поскольку k=0 возвращает 0, результат k=1 становится k + 0 => 1 + 0, печатает 1 и возвращает его
Поскольку k=1 возвращает 1, результат k=2 становится k + 1 => 2 + 1, печатает 3 и возвращает его
Поскольку k=2 возвращает 3, результат k=3 становится k + 3 => 3 + 3, печатает 6 и возвращает его
Поскольку k=3 возвращает 6, результат k=4 становится k + 6 => 4 + 6, печатает 10 и возвращает его
Поскольку k=4 возвращает 10, результат k=5 становится k + 10 => 5 + 10, печатает 15 и возвращает его
Поскольку k=5 возвращает 15, результат k=6 становится k + 15 => 6 + 15, печатает 21 и возвращает его
почему вы используете k + 0 => 1 + 0 в моем вопросе я вычитаю. Я не слежу за вашим ответом.
что 0 указывает tri_recursion(k - 1), что является результатом одного результата рекурсии более низкого уровня.
@quamrana: я не могу понять, почему программа генерирует этот (фактический) вывод. нужно объяснение для этого вывода.