递归打印数字
2014-01-10 21:11
495 查看
看到一道题,对于一个正整数,按顺序每次打印一位。
如果用递归做,就要看问题能不能分解为同构的子问题:
比如1234,要先打印123,再打印4;接着先打印12,再打印3;先打印1,再打印2.之后剩下12,就把2打印出来,以此类推。
所以可以这样:
但是就没有递归那么优雅了。
所以俗语有云:用迭代者是人,用递归者是神!
另外还有一个优化的点,mod运算消耗太大。可以用宏 #define MyMod(N) (N)-ceil(N/10)*10 替代。
但是mod运算为毛消耗大,我布吉岛。
如果用递归做,就要看问题能不能分解为同构的子问题:
比如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运算为毛消耗大,我布吉岛。
相关文章推荐
- 递归连续数 打印出0~9的数字,请补充缺少的代码。
- LintCode-剑指Offer-(371)用递归打印数字
- lintCode 371. 用递归打印数字 java
- [LintCode] 用递归打印数字 Print Numbers by Recursion
- 递归回溯与迭代回溯算法框架,打印在n个数字中取k个数字的所有可能
- 【递归】数字打印
- 面试题目-用递归通过单字符输出打印多位的数字
- LintCode 用递归打印数字
- 1,2,3…n*n 的数字按照顺时针螺旋的形式打印成矩阵(递归)
- lintcode-用递归打印数字
- Lintcode 用递归打印数字
- 0021利用递归算法打印数字金字塔
- 递归入门(十) ---- 打印数字(递归原理详解)
- 371 - 用递归打印数字
- 1,2,3…n*n 的数字按照顺时针螺旋的形式打印成矩阵(递归)
- 用递归打印数字
- 蓝桥杯常用算法知识点:【递归】数字打印
- lintcode(371)用递归打印数字
- LintCode-用递归打印数字
- C和指针之函数之归以字符形式按顺序打印数字的每位数字(递归和非递归)