逆波兰表达式递归怎么理解?

#include
#include
using namespace std;

double exp()
{
char s[20];
cin>>s;
switch(s[0])
{
case '+':return exp()+exp();
case '-':return exp()-exp();
case '*':return exp()*exp();
case '/':return exp()/exp();
default:return atof(s);
}
}

main()
{
printf("%lf",exp());
return 0;
}
/*以* + 11.0 12.0 + 24.0 35.0为例,第一次执行exp(),我们输入了字符串,然后switch(s[0]),碰到了乘号,返回exp()*exp(),如果以普通的函数调用来看这两个式子的任意一个,我认为都会重新执行cin>>s这个命令,而实际情况是自动跳过了*,执行了后面的语句,这让我感到疑惑。

问题一:为什么不能用普通的函数调用来看待第一次执行exp()后的结果exp()+exp()?

问题二:第一次执行完exp()后,我们输入的字符串在内存中的内容有变化吗?
*/

c++

1个回答

首先cin在读取输入的数据时遇到Enter、Space、Tab键就会结束,所以第一次执行的cin只是将*存放到s中,第二次执行的cin,获取的是+,下面都是一样,你可以在逐步调试的时候通过查看s具体的值来得到结论

lqj1985
lqj1985 是我设置的问题,在网上找了一个中文版的教程,可以单步执行了。确实如你所说,我对cin这个命令的认识还不深。
11 个月之前 回复
lqj1985
lqj1985 谢谢,我下的dev c++,可能组件有问题,没办法逐步调试。而另外的一个codeblocks又用不习惯
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐