数组数目字的全排列 有点看不明白

数组数字的全排列 有点看不明白代码如下,注释的就不用了,程序最后输出全排列的个数,不明白为什么要用(k

数组数字的全排列 有点看不明白
代码如下,注释的就不用了,程序最后输出全排列的个数,不明白为什么要用(k > m)来作为n++的条件?

C/C++ code
#include "stdafx.h"#include <stdio.h>int n = 0;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[k], &list);            perm(list, k + 1, m);            //swap(&list[k], &list);        }    }}int main(){    int list[] = {1, 2, 3};    perm(list, 0, 2);    printf("total:%d\n", n);    return 0;}


[解决办法]
这个是个递归算法,慢慢看,断点调试,就知道怎么回事了!F11
[解决办法]
首先你把全排列的递归方法弄懂,你就知道这个是怎么一回事了。百度一个全排列的递归算法吧
[解决办法]
perm(list, k + 1, m); 反复调用所以相当于左边界k++吧 左边界>右边界不就是排完了一排了嘛