使用 Generate all sequences of bits within Hamming distance 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 感兴趣旧方法。
最佳答案
假设您的函数当前没有返回值,一个简单的解决方案是使用它来指示是否满足终止条件。然后,如果结果为真,您可以使用它立即退出所有递归调用。
不确定我在这里是否正确地捕捉到了您预期的逻辑,但直观的方法应该是这样的:
int magic(char* str, int i, int changesLeft) {
int result;
if (changesLeft == 0) {
printf("%s\n", str);
return voices(str);
}
if (i < 0) return 0;
// flip current bit
str[i] = str[i] == '0' ? '1' : '0';
result = magic(str, i-1, changesLeft-1);
if( !result ) {
// or don't flip it (flip it again to undo)
str[i] = str[i] == '0' ? '1' : '0';
result = magic(str, i-1, changesLeft);
}
return result;
}
关于c++ - 满足动态条件时退出递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40835486/