习题10-8 递归实现顺序输出整数
时间: 2025-06-29 12:03:48 浏览: 1
### 使用递归算法按顺序打印整数
为了理解如何使用递归来按顺序打印整数,可以从给定的例子出发。对于一个三位数123来说,在正常情况下,如果希望顺序打印,则应先打印最左边的数字即百位上的1,接着是十位上的2,最后是个位上的3。
考虑C语言中的函数实现:
```c
void recursion_print_in_order(int x) {
if (x > 9) { // 判断是否还有更高位
int length = log10(x); // 计算当前数值有多少位
int highest_digit = pow(10, length); // 获取最高位对应的权重
printf("%d ", x / highest_digit); // 打印最高位
recursion_print_in_order(x % highest_digit); // 对剩余部分继续处理
} else {
printf("%d", x);
}
}
```
上述代码通过计算输入值`x`的最大位权来决定应该先输出哪一位,并利用模运算获取剩下的低位数以便下一次递归调用[^1]。
另一种更简洁的方法是在每次进入更深一层递归之前就完成对应位置上数字的显示操作,这样可以确保较大的单位优先于较小的单位被展示出来。这种方法不需要额外引入数学库支持,而是简单地除以10直到达到个位为止[^3]。
#### 完整示例程序
下面给出完整的C语言源码用于演示这一过程:
```c
#include <stdio.h>
// 函数声明
void printDigitsInOrder(int number);
int main() {
int num;
printf("请输入想要拆解并按顺序打印的正整数:\n");
scanf("%d", &num);
if (num >= 0){
printDigitsInOrder(num);
}else{
printf("仅接受非负整数。\n");
}
return 0;
}
// 实现递归函数
void printDigitsInOrder(int number) {
if(number > 9){
int divisor = 1;
while ((number / divisor) >= 10){
divisor *= 10;
}
printf("%d ", number / divisor);
printDigitsInOrder(number % divisor);
} else {
printf("%d", number);
}
}
```
这段代码实现了接收用户输入的一个正整数,并采用递归的方式将其各个位上的数字依次按照从高到低(左至右)的自然阅读习惯输出。
阅读全文
相关推荐


















