“打印1到n”功能打印1次两次

时间:2013-09-03 15:10:29

标签: c++ recursion

 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 个答案:

答案 0 :(得分:9)

你需要一些大括号:

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

或者,即使cout,第二个n==1也会运行。严格来说,第一个 cout周围的大括号不是必需的,但在这种情况下我喜欢它的样式。

编者注:通过在调试器中单步调试函数,可以轻松解决此问题。

答案 1 :(得分:1)

当你没有在大括号中包含if-else语句时,它只会在它后面直接执行该行。所以在你的情况下,行printInt(n-1);是else语句中的唯一行(在编译器的眼中)。

为了避免这样的问题,请将整个语句括在大括号中:

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

答案 2 :(得分:0)

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

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

所以cout << n << " "不在支票之内。

答案 3 :(得分:0)

void printInt(int n) {
    if (n > 0) {
        printInt(n - 1);
        cout << n << " ";
    }
}
相关问题