以另一种方式打印递归函数

时间:2014-02-20 20:52:05

标签: c++ recursion numbers

我试图编写一个递归函数,它允许我在一个单独的行上打印一个数字的每个数字,如下所示:

int decompose(int n){
  if(n%10){
    cout << n%10 << endl; 
    return decompose(n/10);
  }
}

int main(int argc, char *argv[]){
    decompose(2345);
}

输出

5
4
3
2

问题:我想以其他方式打印

2
3
4
5

怎么做?

2 个答案:

答案 0 :(得分:3)

void decompose(int n){
  if (n>=10)           //Call decompose if there are "more" digits in the number to print
     decompose(n/10);  
  cout << n%10 << endl;  //print the last digit of n
}

int main(int argc, char *argv[]){
    decompose(2345);
}

由于您先分解并稍后以2345这样的数字打印,因此堆栈将如下所示:

main()的

分解(2345)

分解(234)

分解(23)

分解(2)

然后当我们开始返回时,每次通话都会打印最后一位数字:2 - &gt; 3 - > 4 - > 5

注意:在您的版本中,您使用条件if(n%10){}只要n是10的倍数,这将是假的。这意味着带有它的版本将在达到0位数时停止。

使用2345023045

等输入尝试使用它们

答案 1 :(得分:0)

在您的特定情况下,您可以在递归调用之后放置cout,它将以相反的顺序打印。

更一般地说,你不能总是以相反的顺序直接打印,或者不明白怎么做:在这种情况下,你可以将每一步的输出附加到一个字符串向量上,一旦出来功能,以相反的顺序打印矢量。 它效率稍低,需要在每一步保留所有输出,但是,当这些因素可以忽略不计时,它很容易实现和理解。