1
 void printInt(int n){
   if(n==1)
     cout<<1<<" ";
   else
     printInt(n-1);
     cout<<n<<" ";
  }

我得到的输出是

 1 1 2 3....n

我在一张纸上写出了函数的实际步骤,但我不明白它是如何在控制台中打印额外的 1 的(Visual Studio 2010)。这是来自过去的硬件解决方案,所以这只是为了理解它是如何工作的。

4

4 回答 4

9

你需要一些大括号:

   if(n==1)
   {
     cout<<1<<" ";
   }
   else
   {
     printInt(n-1);
     cout<<n<<" ";
   }

否则cout即使n==1. 严格来说,第一个 括号cout不是必需的,但在这种情况下,我喜欢它的风格。

编辑说明:这个问题可以通过在调试器中单步执行你的函数来轻松解决。

于 2013-09-03T15:12:42.200 回答
1

当您没有将 if-else 语句括在大括号中时,它只会执行紧跟其后的行。因此,在您的情况下,该行printInt(n-1);是 else 语句中的唯一行(在编译器的眼中)。

为避免此类问题,请将整个语句括在大括号中:

void printInt(int n){
   if(n==1)
   {
       cout<<1<<" ";
   }
   else
   {
       printInt(n-1);
       cout<<n<<" ";
   }
}
于 2013-09-03T15:14:31.597 回答
0

不幸的是,在 C++ 中没有使用缩进,所以你的代码确实意味着

void printInt(int n){
   if(n==1)
     cout<<1<<" ";
   else
     printInt(n-1);
   cout<<n<<" ";
}

所以在cout << n << " "检查之外。

于 2013-09-03T15:13:27.320 回答
0
void printInt(int n) {
    if (n > 0) {
        printInt(n - 1);
        cout << n << " ";
    }
}
于 2013-09-04T08:38:04.193 回答