top1编程
← 返回题目
题解

用递归实现输出

1 条题解

  • 0
    @ 2026-8-5 23:37:13

    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