提问人:Heng Wei 提问时间:12/5/2020 最后编辑:Heng Wei 更新时间:12/5/2020 访问量:304
使用递归函数求解布尔方程
Solving a boolean equation with a recursive function
问:
我正在尝试编写一个函数,该函数将布尔方程作为其输入,并给出该方程的答案作为其输出。例如:
输入:T&F |F
输出: F
但是,当我对其进行编码时,我的 boolFunc 函数中会出现以下错误:“Non-void 函数不会在所有控制路径中返回值”。
#include <iostream>
#include <cstring>
using namespace std;
bool boolFunc(char* input, long len){
if(len == 1){
if(*input == 'T')
return true;
else
return false;
}
else{
for (int i = 0; i < len; i++) {
if(*(input + i) == '&'){
return boolFunc(input, i) && boolFunc(input+i+1, len-i);
}
if(*(input + i) == '|'){
return boolFunc(input, i) || boolFunc(input+i+1, len-i);
}
}
}
}
int main(){
char input[500] = {'\0'};
cin.getline(input, 500);
if(boolFunc(input,strlen(input)))
cout << "T";
else
cout << "F";
return 0;
}
答:
2赞
Heng Wei
12/5/2020
#1
我修复了这个错误,尽管可能还有另一个逻辑错误,在 T|F&F,操作顺序必须遵循正确的顺序(从左到右)
bool boolFunc(char* input, long len){
if(len == 1){
if(*input == 'T')
return true;
else
return false;
}
else{
for (int i = 0; i < len; i++) {
if(*(input + i) == '&'){
return boolFunc(input, i) && boolFunc(input+i+1, len-i);
}
if(*(input + i) == '|'){
return boolFunc(input, i) || boolFunc(input+i+1, len-i);
}
}
}
//CORRECTION
return false;
}
评论
0赞
nanofarad
12/5/2020
您能否稍微解释一下您对原始代码所做的更改(例如问题是什么,以及您具体如何修复它)?它们将对问题的作者和其他读者有所帮助。
1赞
Heng Wei
12/5/2020
还行!我决定回答我自己的问题,因为有人在评论中给了我一个提示
0赞
nanofarad
12/5/2020
非常感谢,感谢您抽出宝贵时间添加它。
评论
boolFunc
boolFunc("", 0)
boolFunc("1 2", 3)
else
*(input)
&
|
A
if(flag == false)
flag
return false;
boolFunc