满足动态条件时退出递归函数

使用函数生成汉明距离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

回到顶部