您的位置:首页 > 其它

递归打印数字

2014-01-10 21:11 495 查看
看到一道题,对于一个正整数,按顺序每次打印一位。

如果用递归做,就要看问题能不能分解为同构的子问题:

比如1234,要先打印123,再打印4;接着先打印12,再打印3;先打印1,再打印2.之后剩下12,就把2打印出来,以此类推。

所以可以这样:

#include <iostream>

void PrintOut(unsigned int num){
if (num >= 10){
PrintOut(num / 10);
}
printf("%2d ", num % 10);
}
int main(){
PrintOut(12345);
}
其实用栈也可以做成迭代形式的:

#include <iostream>
#include <stack>

void PrintOut(unsigned int num){
std::stack<int> storge;
int temp = num;
while (temp >= 10){
storge.push(temp % 10);
temp /= 10;
}

storge.push(temp);

while (!storge.empty()){
printf("%d", storge.top());
storge.pop();
}
}
int main(){
PrintOut(12345);
}


但是就没有递归那么优雅了。

所以俗语有云:用迭代者是人,用递归者是神!

另外还有一个优化的点,mod运算消耗太大。可以用宏 #define MyMod(N) (N)-ceil(N/10)*10 替代。

但是mod运算为毛消耗大,我布吉岛。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: