解题思路:
递归与循环的思路往往有着相似之处,递归可以解一般循环也可以解。除此之外,尽管递归逻辑上比较直白,而且写起来比较简洁(主函数只有一行),但运行速度未必有循环快。
这里采用递归,在一个递归函数中一体化实现输入与输出过程。输入过程是压栈过程,输出则是退栈过程,利用栈的特性实现题目中的核心逻辑“反向”。相比于普通的读进数组再读出去有两大好处:
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分
2 人评分