0

Рекурсия

#include <iostream> using namespace std; int recSum(int n) { //завершите функцию if (n==1){ return 1; } else { return n + recSum(n-1);} } int main() { //получаем данные int n; cin >> n; cout << recSum(n) << endl; //вызовите рекурсивную функцию и выведите возвращенное значение return 0; } Объясните как оно работает. В моём понимании должно быть следующее: Задаём 3 3!= 1 идём к else 3 + (3-1) n=5 2 не 1 тоже самое 5+ (2-1) 1=1 значит возвращаем 1, а значит вывести должно 1 А почему выводит сумму? Да еще и с учётом 1, которая не входит в else?

2nd Feb 2022, 9:26 AM
Андрей
Андрей - avatar
1 Answer
+ 1
int recSum(int n) { if (n==1){ return 1; } else return n + recSum(n-1); ex: n=3 3==1 => false. else 3+{recSum(3-1)} , pause-1, here now new function call with n=2 2==1 => false. else part { 2+{recSum(2-1)} }, pause-2 here, now new function call with n=1 1==1 => true so returns 1 to last function call of pause-2, will resumes then {2+{1}}=3 , this will returned to its previous function call pause-1, and resumes so finally 3+{3}=6 this returned to main function call and displays int recSum (int n) { если (n==1){ вернуть 1; } еще вернуть n + recSum(n-1); пример: n=3 3==1 => ложь. иначе 3+{recSum(3-1)}, пауза-1, здесь теперь вызов новой функции с n=2 2==1 => ложь. еще часть {2+{recSum(2-1)}}, пауза-2 здесь, теперь вызов новой функции с n=1 1==1=>правда поэтому возвращает 1 к последнему вызову функции pause-2, возобновится затем {2+{1}} =3 , это вернется к предыдущему вызову функции pause-1 и, наконец, возобновится 3+{3}=6 это возвращается к основному вызову функции и отображает
2nd Feb 2022, 9:41 AM
Jayakrishna 🇮🇳