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

#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()后,我们输入的字符串在内存中的内容有变化吗?
*/

  • Willson1991    2019-12-11 10:26:56
  • 阅读 762    收藏 0    回答 1
  • 邀请
  • 收藏
  • 分享
发送
登录 后发表评论
  • 推荐问答
  • 换一换
  • 51testing软件测试圈微信