gpt4 book ai didi

c - 如何打破 C 中的递归?

转载 作者:行者123 更新时间:2023-12-03 09:23:11 24 4
gpt4 key购买 nike

我还是一个编程新手,所以如果有不好的语法和逻辑,请容忍我。我一直在用 C 语言编写一个密码算术解谜器。它从用户那里读取 3 个单词,计算它们的值并将它们打印到屏幕上。 (例如send+more=money -> 9567+1085=10652)

我尝试了类似于排列算法的方法。它可以进行计算,但对于某些输入,结果会打印多次:

Example output

如何修改我的代码,以便第一次处理 if (n1+n2==n3) 下的 printf 命令时递归结束并且程序返回到 main 功能?

/* Swaps the two elements of an array. */
void swap(int v[], int i, int j) {
int t;
t = v[i];
v[i] = v[j];
v[j] = t;
}

/* Solves the Cryptarithmetic puzzle. */
int solve(int v[], int n, int i, char s1[], char s2[], char s3[], char letters[]) {
int k, m, j, t = 0, power, n1 = 0, n2 = 0, n3 = 0;
if (i == n) {
/*....some codes that
* calculate the value of each input word.....*/

/*This part verifies the values and if they are correct, prints them to screen*/
if (n1 + n2 == n3) {
printf("found!\n");
printf("\n%s : %6d\n", s1, n1);
printf("%s : %6d\n", s2, n2);
printf("%s : %6d\n", s3, n3);
}
} else
for (j = i; j < n; j++) {
swap(v, i, j);
solve(v, n, i + 1, s1, s2, s3, letters);
swap(v, i, j);
}
}

最佳答案

需要进行三项更改。首先,你需要在解决问题后返回一些东西:

    printf ("%s : %6d\n", s3 , n3);
return 1;

接下来,需要在递归时检查返回值,如果找到解决方案就停止:

    if (solve (v, n, i+1,s1,s2,s3,letters))
return 1;

最后,如果没有找到解决方案,则需要返回0:

    }
return 0;
}

关于c - 如何打破 C 中的递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27345611/

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