1696:逆波兰表达式

#include<stdio.h>
#include<cstdlib>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<math.h>
using namespace std;
double abc()
{
    char s[100];
    cin>>s;
    if(s[0]=='+') return abc()+abc();
    else if(s[0]=='-')return abc()-abc();
    else if(s[0]=='*')return abc()*abc();
    else if(s[0]=='/')return abc()/abc();
    else
        return atof(s);
}
int main()
{
    printf("%lf",abc());
    return 0;

}


这是对的


但是有个地方不明白,当我用这种方法时就会出现错误。

#include<stdio.h>
#include<cstdlib>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<math.h>
using namespace std;
double abc()
{
    string s;
    cin>>s;
    if(s[0]=='+') return abc()+abc();
    else if(s[0]=='-')return abc()-abc();
    else if(s[0]=='*')return abc()*abc();
    else if(s[0]=='/')return abc()/abc();
    else
        return atof(s);
}
int main()
{
    printf("%lf",abc());
    return 0;
}

1696:逆波兰表达式