Как преобразовать код из нескольких циклов поиска комбинации в рекурсивный метод?

Я пытаюсь преобразовать этот код в рекурсивный метод

for(int i=0;i<25;++i)
for(int j=i+1;j<25;++j)
for(int k=j+1;k<25;++k)
for(int l=k+1;l<25;++l)
for(int m=l+1;m<25;++m)
{//}

метод находит комбинации 25c5. Рекурсивным образом я написал это

int soln[5];
void backtrack(int c)
{
if(c<5)
{
for(int i=c;i<25;++i)
{
soln[c] = i;
backtrack(c+1);

}
}
else
{ // }

мой soln явно неверен, потому что число рекурсий составляет 6 миллионов, но фактическое должно быть 50 тысяч. Как мне это исправить?

3

Решение

void backtrack(int start, int depth) {
if (depth < 5) {
for (int i = start; i < 25; ++i) {
backtrack(i + 1, depth + 1);
}
}
}

Похоже, он будет делать то же самое, что и ваши вложенные циклы.

2

Другие решения

Я думаю, что лучше сравнивать вложенные циклы, чем рекурсивные. Рекурсивным способом метод должен быть вызван, и это занимает некоторое время.

1