lqj1985 2019-12-09 10:13 采纳率: 100%
浏览 313
已采纳

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

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

  • 写回答

1条回答 默认 最新

  • QiQaWgYu 2019-12-09 15:55
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型