如何用C++递归实现输入k后输出1 22 333…k重复k次的序列?
递归实现数字重复序列的C++代码
问题需求
输入一个自然数k,输出形如1 22 333 …的序列,其中第k个元素是数字k重复k次(例如输入6时输出1 22 333 4444 55555 666666)。原代码仅能输出1到k的数字,现提供正确的递归实现方案。
错误的尝试代码
#include <iostream> using namespace std; int x; void func(int n) { if(n>=1){ func(n-1); std::cout<< n << " "; } } int main() { cout << "Enter a natural number: "; cin >> x; func(x); }
正确的递归实现代码
#include <iostream> using namespace std; // 辅助递归函数:打印数字num重复count次 void printNum(int num, int count) { if (count > 0) { cout << num; printNum(num, count - 1); } } // 主递归函数:生成从1到n的目标序列 void generateSequence(int n) { if (n >= 1) { generateSequence(n - 1); printNum(n, n); cout << " "; } } int main() { int k; cout << "Enter a natural number: "; cin >> k; generateSequence(k); return 0; }
代码说明
- 辅助递归函数
printNum:负责将指定数字num重复打印count次,通过递归逐步减少打印次数,直到次数为0时停止。 - 主递归函数
generateSequence:保持原有的递归顺序(先处理n-1,再处理当前n),确保序列从1到k依次输出。处理当前n时,调用printNum(n, n)实现数字n重复n次的打印,随后输出空格分隔元素。 - 测试输入6时,程序会输出
1 22 333 4444 55555 666666(末尾空格不影响结果展示,若需去除可额外调整逻辑)。
内容的提问来源于stack exchange,提问作者Арсен Мегдальський
相关产品推荐
相关产品推荐

