全排列递归函数
#include <stdio.h>int n = 0;
void swap(int *a, int *b)
{
int m;
m = *a;
*a = *b;
*b = m;
}
void perm(int list[], int k, int m)
{
int i;
if(k > m)
{
for(i = 0; i <= m; i++)
printf("%d ", list);
printf("\n");
n++;
}
else
{
for(i = k; i <= m; i++)
{
swap(&list, &list);
perm(list, k + 1, m);
swap(&list, &list);
}
}
}
int main()
{
int list[] = {1, 2, 3, 4, 5};
perm(list, 0, 4);
printf("total:%d\n", n);
return 0;
}
递归函数perm后面还有swap()
我想问几时执行第二个swap perm函数中 if (k > m)
当k大于m的时候,就不递归了,也就如你所愿的执行第二个swap了。
你可以自己写一个小程序慢慢跟一下,好好理解一下递归过程:
例如
fun(int i)
{
if(i < 0)
printf("i = 0\n");
else
{
fun(i-1);
printf("i = %d\n", i);
}
}
页:
[1]