C++用递归模拟栈

来源:百度知道 编辑:UC知道 时间:2024/06/30 16:09:54
#include <iostream>
using namespace std;
void stack(char c);
int main()
{
char d;
cin >>d;
stack(d);
cout <<endl;
return 0;
}
void stack(char c)
{
if (c!='#')//判断是否输入结束
{
char d;
cin >>d;//没有结束则继续输入数据
stack(d);//继续判断输入的数据
cout <<c;//待输入结束则将字符输出
return;//返回调用处,去输出上一个字符
}
else
{
return;
}

想问下到stack(d);//继续判断输入的数据 就看不懂了....

谁能解释下在对void stack(char c) 时本身也可以自己调用?
这是怎么实现的输入字符再倒着输出的呢?
我笨,麻烦详细点!
}

(1)执行cin>>d,输入'a',字符变量d被赋值'a',执行stack(d)函数(第一层);
(2)判断d!='#',为真,执行下一句cin>>d
(3)输入'b',字符变量d被赋值'a',执行stack(d)(第二层);
(4)判断d!='#',为真,执行下一句cin>>d
(5)输入'#',字符变量d被赋值'#',执行stack(d)(第三层);
(6)判断d!='#',为假,结束第三层stack函数,从第二层stack(d)一句后执行,即cout<<c,打印'b';
(7)return,结束第二层stack函数,从第一层stack(d)一句后执行,打印'a'.
因此输入ab, 输出ba

stack(d);//继续判断输入的数
这时候继续调用 void stack(char c)这个函数,也就是继续判断下一个输入的字符
这是递归调用