我试图编写一个递归函数,它允许我在一个单独的行上打印一个数字的每个数字,如下所示:
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
怎么做?
答案 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位数时停止。
使用23450
或23045
答案 1 :(得分:0)
在您的特定情况下,您可以在递归调用之后放置cout,它将以相反的顺序打印。
更一般地说,你不能总是以相反的顺序直接打印,或者不明白怎么做:在这种情况下,你可以将每一步的输出附加到一个字符串向量上,一旦出来功能,以相反的顺序打印矢量。 它效率稍低,需要在每一步保留所有输出,但是,当这些因素可以忽略不计时,它很容易实现和理解。