C++ 添加到10的简单递归函数 int计数(int i) { //基本情况 如果(i==10){ 返回0; } //递归案例 如果(i!=10){ 返回1+计数(i++); } } int main() { 不能这样做: int count(int i) { //base case if(i==10){ return 0; } //recursive case if(i!=10){ return 1 + count(i++); } } int main() { cout << count(0) << endl; }

C++ 添加到10的简单递归函数 int计数(int i) { //基本情况 如果(i==10){ 返回0; } //递归案例 如果(i!=10){ 返回1+计数(i++); } } int main() { 不能这样做: int count(int i) { //base case if(i==10){ return 0; } //recursive case if(i!=10){ return 1 + count(i++); } } int main() { cout << count(0) << endl; },c++,C++,与此相反: count(++i); ++i使用所谓的前缀递增运算符,它在任何其他操作发生之前递增i。另一方面,i++使用后缀递增运算,它在另一个操作(在本例中为函数调用)之后发生换言之,使用后缀运算符可以使函数每次调用时都使用相同的值 而且 而不是这样做: count(i++); 您可以这样做: //base case if(i==10){ return 0; } //recursive case if(i!=10){ return 1 + count(i++); } 使

与此相反:

count(++i);
++i使用所谓的前缀递增运算符,它在任何其他操作发生之前递增i。另一方面,i++使用后缀递增运算,它在另一个操作(在本例中为函数调用)之后发生换言之,使用后缀运算符可以使函数每次调用时都使用相同的值

而且

而不是这样做:

count(i++);
您可以这样做:

//base case
if(i==10){
    return 0;
}

//recursive case
if(i!=10){
    return 1 + count(i++);
}

使用
else
,除了使代码更清晰外,还使用更少的CPU,因为需要对值进行第二次比较(如if参数)不会发生。

欢迎使用堆栈溢出。请花时间阅读并参考“您可以在此处询问的内容和方式”中的资料。解决此类问题的正确工具是调试器。在询问堆栈溢出问题之前,您应该逐行检查代码。有关更多帮助,请阅读。至少,您应该[编辑]您的问题将包括一个重现您的问题的示例,以及您在调试器中所做的观察。在每次调用
count
@πάντα时检查
i
的值ῥεῖ 看起来是这样的,因为有冗余的if语句。所有逻辑控制路径仍然返回一个值。为什么不只
返回计数(i+1)
?对于这样一个简单的任务来说,这仍然太让人困惑了。@DavidSchwartz使用前缀运算符告诉编译器使用更高效的INC指令,它只需要使用一个寄存器作为输入,而不是ADD指令,它使用一个寄存器作为输入并修改AX。这在很多级别上都是毫无意义的,我不知道首先,它是写在哪里,C++编译成一个CPU,它有一个指令叫做“Inc”和“Add”?什么规则说一个对所有CPU都比另一个更有效?什么样的白痴编译器不能在这个特定平台上做一个明显的微优化?
//base case
if(i==10){
    return 0;
}

//recursive case
else {
    return 1 + count(i++);
}