gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:15:18 28 4
gpt4 key购买 nike

使用 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 - 我什至对 感兴趣旧方法。

最佳答案

假设您的函数当前没有返回值,一个简单的解决方案是使用它来指示是否满足终止条件。然后,如果结果为真,您可以使用它立即退出所有递归调用。

不确定我在这里是否正确地捕捉到了您预期的逻辑,但直观的方法应该是这样的:

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com