全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2458 1
2014-06-06
好吧,无人问津,那么帮忙解决了问题。还是无人问津,提高悬赏,送80个论坛币。

下面的程序做5取3的排列组合过程,取值是3个,2个0. 哪位朋友能麻烦解答下这个程序是怎么完成各个组合的计算的呢。这个是help文档里的事例
复制代码


还有在:   
scratch[m] = 1;     
call permk(n, k, scratch, m+1, i+1);


这个部分,难道是一直进行循环到m-1=n?这样scratch都取值是1了么?可是这个时候i=k也不成立啊,那怎么输出scratch?各位帮帮忙解释一下吧
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-6-23 09:20:44
permk子过程的m用于标记当前循环所处scratch的位置,初始值为1,到n+1时结束,i用于记录scratch中1的数目。

开始循环时,m=1,i=0,进入else部分,scratch[1]=1,然后再call permk(5,3,scratch,2,1),这时就进入了递归的第二重循环,这时scratch[2]=1,然后再call permk(5,3,scratch,3,2),...,直到m=6为止,此时scratch里面有五个1,i=5,不满足i=3的条件,所以不输出

这时循环开始逐个跳出第一个call permk,进入下一个call permk,即逐步为scratch由后向前把1换0,.....

说了这么多我都晕了,简单说来就是遍历一个5位的2进制数的所有可能,然后每一位上的1相加之和等于3才输出。如果想更直观些,只要把if i=k then那一行注释掉,然后看看程序输出些什么就好了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群