gpt4 book ai didi

C:打印以 'a' 开头的每个可能的字符串,递归函数

转载 作者:行者123 更新时间:2023-11-30 20:59:38 25 4
gpt4 key购买 nike

我想创建一个程序,打印以任意最大长度的字符“a”开头的每个可能的字符串。对于这个例子,我们将使用最大长度 4。递归函数似乎是处理这个问题的好方法,但是我现在真的很困惑为什么递归函数不会打印例如“ab”?再次调用递归后,循环似乎不再继续。

int main () 
{
char *str = malloc(5* sizeof(char));
str[0] = 'a';
recursive(str, 1);
}

void recursive(char *string, int index)
{
// Max length of 4
if (index > 3)
return;

for(char c = 'a'; c <= 'j'; c++)
{
string[index] = c;
printf("str: %s\n", string);

recursive(string, index + 1);
}
}

虽然结果接近我想要的,但请注意,没有“ab”、“ac”、“abc”、“acb”,基本上是任何长度为 2 或 3 的字符串(aa/aaa 除外)。不过,长度为 4(最大)的每个组合都会被打印。

the result

有什么办法可以解决这个问题吗?谢谢!

最佳答案

您的算法或递归没有任何问题。您唯一需要的就是在递归步骤完成后缩短字符串(字符串在 C 中为 ASCIIZ)。

修复很简单:您需要确保分配的内存块中有零,这是通过使用 memset 清除其内容来完成的。 (malloc返回指针的内存块包含垃圾)。

int main () 
{
size_t size = 5;
char* str = (char*)malloc(size);
memset(str, 0, size);
str[0] = 'a';
recursive(str, 1);
}

然后在你的循环中:

for (char c = 'a'; c <= 'j'; c++)
{
string[index] = c;
printf("str: %s\n", string);

recursive(string, index + 1);

string[index] = 0; // <-- revert last letter to zero
}

关于C:打印以 'a' 开头的每个可能的字符串,递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46388176/

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