Nabeel Munir Ответов: 2

Нужна помощь в понимании рекурсивной функции в C++


Я пытаюсь понять функцию в c++.
насколько я понимаю, здесь a=x
а значение x после x=19% 4+2 равно 5, так что блок else будет выполнен
И выход этого кода-24.
Я хочу знать, каким образом? Не мог бы кто-нибудь объяснить мне, пожалуйста.
Спасибо.
Код приведен ниже.

Что я уже пробовал:

#include<iostream>

using namespace std;


int fun1(int a );

int main(){
int x=19;
x= 19%4+2;
cout<<fun1(x);

}

int fun1(int a){
	if(a==1 || a==2){
		return 2*a;
	}else {
		return 2+fun1(a-1)+fun1(a-2);
	}
}

2 Ответов

Рейтинг:
18

User 7429338

Я бы использовал отладчик, чтобы пройти через код и проверить переменные. fun1 называется 9 раз, так что это вполне выполнимо.

Первый звонок, а = 5:

if(a==1 || a==2){ // False, a = 5
    return 2*a;
}else { // True
    return 2+fun1(a-1)+fun1(a-2); // Call fun1() with values 5 - 1 = 4, and with 5 - 2 = 3
}
Второй звонок, а = 4:
if(a==1 || a==2){ // False, a = 4
    return 2*a;
}else {              // True
    return 2+fun1(a-1)+fun1(a-2); // Call fun1() with values 4 - 1 = 3, and with 4 - 2 = 2
}
Третий звонок, а = 3:
if(a==1 || a==2){ // False, a = 3
    return 2*a;
}else { // True
    return 2+fun1(a-1)+fun1(a-2); // Call fun1() with values 3 - 1 = 2, and with 3 - 2 = 1
}
Четвертый звонок, а = 2:
if(a==1 || a==2){ // True
    return 2*a; // Return 2 * 2 = 4
}else {
    return 2+fun1(a-1)+fun1(a-2);
}

и т.д.


CPallini

Мой 5.

Рейтинг:
0

CPallini

Также взгляните на: C++ Recursion - Рекурсивная Функция[^].