满足动态条件时退出递归函数
使用函数生成汉明距离t内的所有位序列:
void magic(char* str, int i, int changesLeft) { if (changesLeft == 0) {
printf("%s\n", str);
return;
}
if (i < 0) return;
// flip current bit
str[i] = str[i] == '0' ? '1' : '0';
magic(str, i-1, changesLeft-1);
// or don't flip it (flip it again to undo)
str[i] = str[i] == '0' ? '1' : '0';
magic(str, i-1, changesLeft);
}
我想退出递归函数,并在发生某种情况时返回调用方函数(如果确实如此)。因此,就像我的递归功能正在听到可能告诉她退出的声音一样!
它仅在 str
打印后发生,这里:
if (changesLeft == 0) { printf("%s\n", str);
int quit_now = voices(str);
return;
}
如何做到这一点(停止展开递归并返回到函数调用者)?
尝试:
if (i < 0 || quit_now == 1) return;
似乎只是阻止执行,而且永远不会结束!
PS-我也有兴趣 C
旧的方法论。
回答:
要以最简单的形式显示,您可以执行以下操作:
void foo(bool & ret) { // doStuff...
if (ret) return;
foo(ret);
// doStuff...
if (ret) return;
foo(ret);
}
然后,您启动递归:
bool ret = false;foo(ret);
在您的情况下,您可以通过以下方式中断递归
if (!changesLeft) { printf("%s\n", str);
ret = true;
return;
}
设置为true将使您脱离整个调用树。
您也可以在C语言中完成操作,只需使用指针而不是引用即可。
以上是 满足动态条件时退出递归函数 的全部内容, 来源链接: utcz.com/qa/417496.html