Josephus問題解決方法五(遞迴)

Diy_os發表於2015-12-09
該問題的解決方法有很多種,關於Josephus問題,前面已經給出了4種解法(http://blog.itpub.net/29876893/viewspace-1853008/),是筆者對該問題產生濃厚的興趣下而寫出的,這些演算法(可以說是很簡單的吧,嘿嘿)是筆者走路或者吃飯的時候想出的(原創哦~_~),也許其中功能不是太完善或不當之處,請大家諒解。今天突然想起解決該問題是不是可以用遞迴呢?立馬開啟VS,簡單的 修改了之前的解決方法四,透過畫圖分析這種方法是可行的。下面給出程式碼:

點選(此處)摺疊或開啟

  1. #include<iostream> //遞迴解決該問題
  2. #define MAX_SIZE 10
  3. using namespace std;
  4. int j, flag, q, sizeA;
  5. int i;
  6. char lastone;
  7. void searchnote(char *, int);
  8. void searchnote(char *A, int n) {

  9.  
  10.         if (i == sizeA) {
  11.             i%=sizeA;
  12.         }
  13.         if(A[i] == NULL){
  14.             i++;                //跳過資料域為NULL的元素,i需要自增1
  15.             searchnote(A, n);  //該步中,本想用“臭名昭著"的goto語句,直接跳過下面的語句,但是筆者棄用了。
  16.             }
  17.          q++;
  18.             if (q == n) {
  19.                 cout << A[i]<< " ";
  20.                 flag++;
  21.                 if (flag == sizeA) {
  22.                     lastone = A[i];
  23.                 }
  24.                 A[i] = NULL;
  25.                 q = 0;
  26.                 
  27.             }
  28.             if (flag == sizeA) {    //遞迴退出的條件
  29.                 cout << endl;
  30.                 cout << "獲勝的同學是:" << endl;
  31.                 cout << lastone;
  32.                 cout << endl;
  33.                 exit(-1);
  34.             }
  35.             i++;    //i需要自增1
  36.             searchnote(A, n);
  37.         

  38. }

  39. int main() {

  40.     cout << "請輸入同學的編號:" << endl;
  41.     char note[MAX_SIZE];
  42.     for (char ch; cin >>ch, j++) {
  43.         note[j] = ch;
  44.         cout << note[j] << " ";
  45.         sizeA++;
  46.     }
  47.     cout << endl;
  48.     cout << "出列同學的順序依次是:" << endl;
  49.     searchnote(note, 4);
  50.     cout << endl;
  51. }
執行結果:

上面的程式碼,讀者仔細對比解決方法四會發現,只是把方法四中的for語句去了,然後再簡單的修改,這種遞迴看起來比較的臃腫,這是筆者最先想到的解決方法,棄用for語句。希望讀者有更好的遞迴演算法。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29876893/viewspace-1868992/,如需轉載,請註明出處,否則將追究法律責任。

相關文章