棘手的按值传递和按引用递归问题传递



以下是C++的代码片段。正确答案是6561,但我不太明白为什么。我完全理解递归如何在幕后运行,但我无法说出为什么将 &x(引用(和 x(值(传递到函数中的结果完全不同。有人会帮我吗?我好困惑...非常感谢!

我的逐步理解是,每次递归都会计算c = c - 1和x = x + 1,并将值传递给递归fun(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;
}
f(5,5) -> c = 4; a = x = 6
f(6,4) -> c = 3; a = x = 7
f(7,3) -> c = 2; a = x = 8
f(8,2) -> c = 1; a = x = 9
f(9,1) -> c = 0; return 1;
-----
f(8,2) returns 1 * x = 9
f(7,3) returns 9 * x = 9 * 9 = 81
f(6,4) returns 81 * x = 81 * 9 = 729
f(5,5) returns 729 * x = 729 * 9 = 6561

希望这有帮助

return f(x, c) * x;

因为它是 referans 的 x 的值与f(x,c)和乘法*x不同。 后者在调用结束后f(x,c)更改。

最新更新