解题思路:


递归与循环的思路往往有着相似之处,递归可以解一般循环也可以解。除此之外,尽管递归逻辑上比较直白,而且写起来比较简洁(主函数只有一行),但运行速度未必有循环快。

这里采用递归,在一个递归函数中一体化实现输入与输出过程。输入过程是压栈过程,输出则是退栈过程,利用栈的特性实现题目中的核心逻辑“反向”。相比于普通的读进数组再读出去有两大好处:

1、局部变量内存申请在栈上,函数结束后内存会释放。如果读入数组中,则会占用一定的内存。我们只是希望实现一个反向的输出,并没有长期存储的必要。

2、可扩展性好。如果数组长度发生改变,读数组的方法需要修改数组大小、循环体等多处,采用递归则只需修改递归层数一个数字。


注意事项:


先进行cin压栈,然后进入递归,然后cout退栈,顺序不能乱。只需想象递归到头返回后第一个执行的操作是最后一层的cout,就不会写错。

参考代码:

#include<iostream>
using namespace std;

int InversePrint(int i)
{
    int temp; //局部变量
    if(i<10) //递归层数
    {
        cin>>temp; //压栈
        InversePrint(i+1); //递归
        cout<<temp<<" "; //退栈
    }
    else
        return 0;
}

int main()
{
    InversePrint(0);
}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

xyz 3年前 回复TA
萌新看不懂