RE:疑难求解
作者:拉格浪日 标签:技术 | 阅读次数:22 |
![]() ![]() ![]() |
| ![]() ![]() ![]() |
我认为可以这样理解:
perm函数来对字符串进行递归. 当执行 char s[6]="01234"; Perm(s,0,4);时 // 递归地产生这些排列方式 for (i=k; i <= m; i++) { Swap (&list[k], &list[i]); Perm (list, k+1, m); Swap (&list [k], &list [i]); } 循环里的k=0,m=4,此循环里面两个Swap函数其实就是把第一个字符分别和后面的数字进行交换,在保持第一位不变的前提下,可以把问题转化为Perm (list, k+1, m); 对该例子也就是只改变第一到四位,这样在保持前n位不变的前提下利用递归的栈保存前面的数据,通过重复交换,在满足 if (k == m) 就可以有一个输出了.通过递归可以输出所有结果. 我不知道这样说是否清楚. 这个题在有关算法的书上是可以查到的,大概是减治或者递归那一章,你可以查一下好好看看,其实如果有了一些算法的思想这个还是可以理解的. |