题解
用递归实现输出
1 条题解
-
0
P4744 用递归实现输出(入门)
解题思路
题目要求用递归输出 1 到 10,中间用空格隔开,也就是输出"1 2 3 4 5 6 7 8 9 10"。
我们定义一个函数 print(n),它的任务是"输出从 n 到 10"。想一想:print(n) 可以先输出 n,然后再调用 print(n+1) 输出剩下的部分。当 n 大于 10 时,什么都不用输出了,直接返回,这就是递归的出口。
递归就像排队报数:第 1 个人喊完"1",喊第 2 个人;第 2 个人喊完"2",喊第 3 个人……一直喊到 10。每个人只负责"喊自己的号,再让下一个人喊",问题就解决了。
注意输出格式:数字之间用空格隔开。我们可以在除了第一个数以外,每个数前面输出一个空格。这样写:如果 n>1,先输出一个空格,再输出 n。这样输出的结果就不会有多余空格或开头空格。
这道题没有输入,主函数里直接调用 print(1) 就行,最后再输出一个换行。
边界情况:当 n 到 11 时出口生效,不再继续递归。递归只进行 10 层,非常安全,不会栈溢出。
参考代码
// 用递归实现输出:依次输出1到10,用空格隔开 #include <iostream> void print(int n) { if (n > 10) return; if (n > 1) std::cout << " "; std::cout << n; print(n + 1); } int main() { print(1); std::cout << "\n"; return 0; }复杂度分析
每次调用 print 只做常数次操作,一共调用 10 次(从 1 到 10),所以时间复杂度是 O(10),也就是常数时间 O(1)。空间上递归深度是 10 层,占用 O(10) 的栈空间,同样非常小。无论怎样,输出固定是"1 2 3 4 5 6 7 8 9 10",结果确定,程序简单又可靠。
- 1