C++ 递归中无效的void操作数
我试着用递归法把这个数字分成12,3,比如123。所以我有一个问题,因为我使用了C++ 递归中无效的void操作数,c++,recursion,void,C++,Recursion,Void,我试着用递归法把这个数字分成12,3,比如123。所以我有一个问题,因为我使用了void,现在编译器显示: “void”和“int”类型的操作数对二进制“operator!=”无效 在递归所在的最后一行中。 我假设一开始是关于a和b的比较,但是a和b是int类型,所以我不明白为什么不能将它们与0进行比较 void podzial ( int N, int a, int b, int & k ) { if(N==0 and a!=0 and b!=0) if(prime(a,b))
void
,现在编译器显示:
“void”和“int”类型的操作数对二进制“operator!=”无效
在递归所在的最后一行中。
我假设一开始是关于a
和b
的比较,但是a
和b
是int
类型,所以我不明白为什么不能将它们与0
进行比较
void podzial ( int N, int a, int b, int & k )
{
if(N==0 and a!=0 and b!=0)
if(prime(a,b))
{
cout<<a<<b<<endl;
k++;
}
else if(N==0) return;
else
{
a*=10; b*=10;
podzial(N/10,a+(N%10),b,k) or podzial(N/10,a,b+(N%10),k);
}
}
void podzial(int N,int a,int b,int&k)
{
如果(N=0,a!=0,b!=0)
if(素数(a,b))
{
coutpodzial
有一个void
返回值,因此不能用作或
(即|
)条件检查中的参数
您不希望函数返回一个int
还要记住,或
是短路的,因此如果左侧的计算结果为true
,podzial
有一个void
返回值,则不会对右侧进行计算,因此不能在或
(即|
)条件检查中用作参数
void podzial (int N, int a, int b, int& k) {
...
else if(N == 0) {
return; // Should't have a return here since podzial's return type is void.
//
// You can just do what I do in the code example below.
}
...
您不希望函数返回一个int
还要记住,或
短路,因此,如果左侧的计算结果为真
,则不会对右侧进行计算
void podzial (int N, int a, int b, int& k) {
...
else if(N == 0) {
return; // Should't have a return here since podzial's return type is void.
//
// You can just do what I do in the code example below.
}
...
您可能需要重新组织if语句
void podzial (int N, int a, int b, int& k) {
if(N == 0) {
if(a != 0 && b != 0) {
if(prime(a, b)) {
cout << a << b << endl;
k++;
}
}
cout << "Recursion terminated";
}
else {
a *= 10;
b *= 10;
podzial( N / 10, a + (N % 10), b, k)
// or podzial(N / 10, a, b + (N % 10), k);
// If you actually wanted to write...
// return podzial(...) || podzial(....)
// Then you'll need to add a return type to the function header
// and can keep the 'else if(N==0) return 0;'
}
}
void podzial(int N,int a,int b,int&k){
如果(N==0){
如果(a!=0&&b!=0){
if(素数(a,b)){
库特
您可能需要重新组织if语句
void podzial (int N, int a, int b, int& k) {
if(N == 0) {
if(a != 0 && b != 0) {
if(prime(a, b)) {
cout << a << b << endl;
k++;
}
}
cout << "Recursion terminated";
}
else {
a *= 10;
b *= 10;
podzial( N / 10, a + (N % 10), b, k)
// or podzial(N / 10, a, b + (N % 10), k);
// If you actually wanted to write...
// return podzial(...) || podzial(....)
// Then you'll need to add a return type to the function header
// and can keep the 'else if(N==0) return 0;'
}
}
void podzial(int N,int a,int b,int&k){
如果(N==0){
如果(a!=0&&b!=0){
if(素数(a,b)){
您是否可以添加额外的{}
,以明确如果s与else
s匹配,则哪些。目前很难确定您想要哪些分支请解释您想要最后一行做什么(最长的一行)是的,谢谢Caleth,因为正如我现在看到的,实际上这个else
出错了if
。我想添加N的最后一位(我拆分的数字)到a或b,但我意识到我做了两个相同的分割,所以一个podzial
就足够了,但在第一次运行中,我必须选择哪一个将包含最后一位的值。您可能需要添加额外的{}
为了弄清楚哪个if
s和哪个else
s一起。目前很难说你想要哪个分支请解释你想要最后一行做什么(最长的一行)是的,谢谢Caleth,因为我现在看到的这个else
发生了错误if
。我想加上N的最后一位(我拆分的数字)但我意识到我做了两个完全相同的分割,所以一个podzial
就足够了,但在第一次运行中,我必须选择哪一个将有最后一个数字,如果你想在条件表达式中使用它,它应该返回''bool'@RobertAndrzejuk',或者隐式转换为bool。如果返回的结果是整数值,那么我nteger类型应该被返回。但是如果结果是“true”或“false”,那么只应该使用bool。根据设计,结果类型不应该基于隐式转换。谢谢!现在,我当然知道我不能在这里执行或。是的,最后返回k值是有必要的,但我不知道应该在哪里初始化zeint k=0
因为它是递归的,所以我决定生成int&k
并生成另一个返回kIf的函数,如果你想在条件表达式中使用它,它应该返回''bool''@RobertAndrzejuk或隐式转换为bool。如果返回的结果是一个整数值,那么应该返回整数类型。但是如果结果是“真”或“假”,则只应使用bool。根据设计,结果类型不应基于隐式转换。谢谢!现在,我当然看到我不能在这里执行或。是的,最后它不应该返回k值,但我不知道应该在哪里初始化int k=0
,因为它是递归的所以我决定做int&k
并做另一个返回k的函数