数组数字的全排列 有点看不明白代码如下,注释的就不用了,程序最后输出全排列的个数,不明白为什么要用(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++吧 左边界>右边界不就是排完了一排了嘛
