#python #c #recursion #combinations
#python #c #рекурсия #комбинации
Вопрос:
Я хочу сгенерировать все возможные комбинации с помощью рекурсии, нашел решение на python, но не знаю, как его реализовать на C.
def combinations(text):
if "?" in text:
for char in "abc":
combinations(text.replace("?", char, 1))
else:
print(text)
combinations("???")
Что дает нам все возможные комбинации длины 3 с использованием abc.
Мой код на C выглядит примерно так, но он работает не так, как должен быть.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char chars[4] = "abc";
void combinations(int repeat, char *result){
if (repeat--){
for (int i = 0; i < 3; i ){
result[strlen(result)] = chars[i];
combinations(repeat, result);
}
}
else{
printf("%sn", result);
result[0] = '';
}
}
int main(){
char *res = (char *)malloc(2000);
combinations(3, res);
}
Я ожидаю, что он выводит все возможные уникальные комбинации длины 3 с использованием abc:
aaa
aab
aac
aba
...
Какие выходные данные кода C:
aaa
baa
caa
baaa
...
Комментарии:
1. Почему бы и нет
#include <string.h>
и использоватьstrlen
вместо домашней выпечкиlen
?2. @Stef, да,
const
ключевое слово должно использоваться, чтобы прояснить намерение и помочь выявить ошибки реализации, но без него нет риска сбоя, если реализация фактически не пытается изменить строку. В C все было бы иначе, но там риск был бы связан с ошибками компиляции, а не с сбоями во время выполнения.3. @JohnBollinger В последние дни я был погружен в так много python, что на секунду я действительно забыл, что настоящие языки программирования компилируются: ‘(
4. Вам нужно всего 4 символа (не 2000), если вы делаете это онлайн с обратным отслеживанием, если вы не собираетесь сохранять результаты?