如何用递归函数将整数拆分为单个数字(如731→[7,3,1])
用递归实现整数拆分为单个数字
实现1:与你的循环代码输出一致(逆序打印)
递归思路:先打印当前数字的最后一位,再递归处理去掉最后一位后的剩余数字,直到数字变为0时终止递归。
#include <iostream> using namespace std; void argam(int n); int main() { int a; cout << "Please enter num : "; cin >> a; argam(a); } void argam(int n) { if (n == 0) { return; // 递归终止条件:数字为0时停止 } cout << n % 10 << "\n"; // 先输出当前数字的最后一位 argam(n / 10); // 递归处理去掉最后一位后的数字 }
测试输入345时,输出与你提供的循环代码完全一致:
5 4 3
实现2:正序拆分(如731→7、3、1)
如果需要按照数字原本的顺序输出(和你开头示例的731→[7,3,1]逻辑一致),只需调整递归与打印的顺序:先递归处理高位部分,再打印当前位。
#include <iostream> using namespace std; void argam(int n); int main() { int a; cout << "Please enter num : "; cin >> a; // 单独处理输入为0的特殊情况 if (a == 0) { cout << 0 << "\n"; return 0; } argam(a); } void argam(int n) { if (n == 0) { return; // 递归终止条件 } argam(n / 10); // 先递归处理高位数字 cout << n % 10 << "\n"; // 再输出当前位 }
测试输入731时,输出:
7 3 1
递归逻辑说明
递归的核心是将大问题拆解为更小的子问题:
- 对于数字
n,拆分任务可拆分为「拆分n/10」和「处理n%10」两个子任务 - 调整两个子任务的执行顺序,就能控制输出的正/逆序
- 当
n == 0时,没有更多数字需要处理,递归终止
内容的提问来源于stack exchange,提问作者helpme.stock
相关产品推荐
相关产品推荐

