遞歸應用-全排列

  全排列

  給定n個元素的{1,2,3,4,5,…,n}的序列,我們想產生該序列的所有排列(Permutation).對於n個元素的排列,一共有n!種。 那怎麼設計算法?

  

    試試遞歸。

     1    初始條件條件,當元素只有一個的時候,全排列很簡單的產生。

     2  怎麼派生出小規模的同種類型的問題,將序列逐次按1的步長減小。比如 perm(m) 裏面求perm(m+1)  (注:n 爲元素下標 m>=0並  m<n ,依次下去,元素m-元素n之間的

         個 數越來越小)

      具體實施步驟

      固定位置找元素

    最關鍵的步驟

      也是就是說,如果我們能求出n-1個元素的全排列

        求出元素2,3,。。。。。,n的全排列 ,將元素1放到最前面

        求出元素1,3,。。。。。,n的全排列,將元素2 放到最前面

        以此循環得到序列n的全排列.

        這裏面需要注意的問題,爲了使全排列 序列不重複,每產生一次序列,需要將原來位置上的元素給換回來。

       相應的僞代碼如下

     //arry[] n 序列n

     //m  遊標

    // length 數組長度

      perm(arry[] n,m,length)

      {

          if    m=lenght -1   then   print(n); return;

          else

             for(int j=m ;j<length;j++)

              {

                         n[j] 與n[m] 互換;

                        perm(arry[] n,j,length);

                        n[j] 與n[m] 互換;

              }

                  return;

      }

     

点赞