[理工] 資結 排列組合演算法的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