Ниже приведен фрагмент кода из C ++. Правильный ответ 6561, но я не совсем понимаю, почему. Я полностью понимаю, как рекурсия проходит за сценой, но я не могу сказать, почему результат полностью отличается от pass & x (reference) и x (value) в функцию. Кто-нибудь поможет мне? Я оооочень смущен ... очень признателен!
Пошагово я понимаю, что каждая рекурсия выполняет вычисление c = c - 1 и x = x + 1 и передает значение в рекурсивную забаву (x, c) в противоположность правильному ответу, который должен сохранить ту же самую копию для x, показанную как следующее:
f (5,5) = f (6, 4) * 6
f (5,5) = f (6,4) * 6 = f (7,3) * 6 * 7
f (5,5) = f (6,4) * 6 = f (7,3) * 6 * 7 = f (8,2) * 6 * 7 * 8
f (5,5) = f (6,4) * 6 = f (7,3) * 6 * 7 = f (8,2) * 6 * 7 * 8 = f (9,1) * 6 * 7 * 8 * 9 = 1 * 6 * 7 * 8 * 9 = 3024
#include <iostream>
int f(int &x, int c) {
c = c - 1;
if (c == 0) return 1;
x = x + 1;
return f(x, c) * x;
}
int main(){
int a = 5;
int b = 5;
std::cout<<"final result is " << f(a,b) << "\n";
return 0;
}