[理工] 资结 排列组合算法的code疑问

楼主: wacheck (94不爱喝水)   2018-07-12 22:21:05
https://i.imgur.com/gwmEd0q.jpg
请问一下各位
老师上课假设 list[1]=a, list[2]=b , list[3]=c
依据副程式perm是产生list[i]到list[n]的排列组合
今天我设i=n=2时,
以下是我的理解:
lis[1]跟list[2]作排列组合,也就是a和b作排列组合,会有ab、ba两种可能
但是根据code的意思,if条件成立时(i=n=2)
当j=1时 会印出list[1]的内容,也就是印出a
当j=2,印出list[2]的内容,也就是印出b
也就是指印出ab一种可能而已
不知道我的认知错在哪边 麻烦大家了 感恩
楼主: wacheck (94不爱喝水)   2018-07-12 22:22:00
忘记补充了,图中红线部分就是我的疑问QQ
作者: As77 (砷77)   2018-07-12 22:33:00
你的理解是错的 先确定知道recursion是什么,终止条件为何是i == n
作者: y2j60537 (skkkkuu)   2018-07-12 23:12:00
不管call几次perm()参数n的值都是3 所以终止条件只会是i=n=3 第一次丢进去的n是多少整个recursion里面的n就是多少
楼主: wacheck (94不爱喝水)   2018-07-13 00:09:00
递回的定义我了解 但想请问A大为何要i=n 被问倒了...第一次丢进去的n是多少整个recursion里面的n就是-->y大可以在说详细一些吗QQ
作者: y2j60537 (skkkkuu)   2018-07-13 01:22:00
perm(list,1,3)=把list的第一项到第三项做排列。使用递回定义:排1~3=第一项固定+排2~3项。 那终止条件i=n就是做到排第3到第3项时 代表已经排完了所以可以output结果我觉得下面那个流程图再仔细想一下多带一些参数练习应该可以解惑 做个perm(list,2,3),list=abc 注意一下call到perm(list,i,n)时,那时的list是长什么样子
楼主: wacheck (94不爱喝水)   2018-07-13 08:09:00
感谢解惑!!(跪)

Links booklink

Contact Us: admin [ a t ] ucptt.com