我的教授给出了以下关于找到一组数字的排列的递归算法的解释:
当他有(T(m + 1),n-1))它来自哪里?为什么是m + 1和n-1?我真的很困惑它来自哪里。
答案 0 :(得分:3)
正如他所说,m
表示P
的当前大小,n
表示S
的大小,在每次递归调用中,您从{{1}中删除一个数字并将其添加到S
,因此当前排列的大小增加1(P
),并且要添加到排列的可用数字的数量减少1({{1} })
请注意,当您对m+1
中的每个号码执行此操作时,它会乘以n-1
。
答案 1 :(得分:0)
请注意:
部分让
m
为P
的长度,n
的大小为S
然后在printperm(P, S)
,您正在呼叫printperm((P,i), S-{i})
。
因此,在递归时,我们会向P
添加一个元素,并从S
中删除元素。
因此m
会增加1,而n
会减1,因此我们会T(m+1, n-1)
我希望有所帮助。