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?
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 это возвращается к основному вызову функции и отображает