原题链接:[编程入门]数字逆序输出
解题思路:
递归与循环的思路往往有着相似之处,递归可以解一般循环也可以解。除此之外,尽管递归逻辑上比较直白,而且写起来比较简洁(主函数只有一行),但运行速度未必有循环快。
这里采用递归,在一个递归函数中一体化实现输入与输出过程。输入过程是压栈过程,输出则是退栈过程,利用栈的特性实现题目中的核心逻辑“反向”。相比于普通的读进数组再读出去有两大好处:
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分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复