Josephus問題解決方法五(遞迴)
該問題的解決方法有很多種,關於Josephus問題,前面已經給出了4種解法(http://blog.itpub.net/29876893/viewspace-1853008/),是筆者對該問題產生濃厚的興趣下而寫出的,這些演算法(可以說是很簡單的吧,嘿嘿)是筆者走路或者吃飯的時候想出的(原創哦~_~),也許其中功能不是太完善或不當之處,請大家諒解。今天突然想起解決該問題是不是可以用遞迴呢?立馬開啟VS,簡單的 修改了之前的解決方法四,透過畫圖分析這種方法是可行的。下面給出程式碼:
執行結果:
上面的程式碼,讀者仔細對比解決方法四會發現,只是把方法四中的for語句去了,然後再簡單的修改,這種遞迴看起來比較的臃腫,這是筆者最先想到的解決方法,棄用for語句。希望讀者有更好的遞迴演算法。
點選(此處)摺疊或開啟
-
#include<iostream> //遞迴解決該問題
-
#define MAX_SIZE 10
-
using namespace std;
-
int j, flag, q, sizeA;
-
int i;
-
char lastone;
-
void searchnote(char *, int);
-
void searchnote(char *A, int n) {
-
-
-
if (i == sizeA) {
-
i%=sizeA;
-
}
-
if(A[i] == NULL){
-
i++; //跳過資料域為NULL的元素,i需要自增1
-
searchnote(A, n); //該步中,本想用“臭名昭著"的goto語句,直接跳過下面的語句,但是筆者棄用了。
-
}
-
q++;
-
if (q == n) {
-
cout << A[i]<< " ";
-
flag++;
-
if (flag == sizeA) {
-
lastone = A[i];
-
}
-
A[i] = NULL;
-
q = 0;
-
-
}
-
if (flag == sizeA) { //遞迴退出的條件
-
cout << endl;
-
cout << "獲勝的同學是:" << endl;
-
cout << lastone;
-
cout << endl;
-
exit(-1);
-
}
-
i++; //i需要自增1
-
searchnote(A, n);
-
-
-
}
-
-
int main() {
-
-
cout << "請輸入同學的編號:" << endl;
-
char note[MAX_SIZE];
-
for (char ch; cin >>ch, j++) {
-
note[j] = ch;
-
cout << note[j] << " ";
-
sizeA++;
-
}
-
cout << endl;
-
cout << "出列同學的順序依次是:" << endl;
-
searchnote(note, 4);
-
cout << endl;
- }
上面的程式碼,讀者仔細對比解決方法四會發現,只是把方法四中的for語句去了,然後再簡單的修改,這種遞迴看起來比較的臃腫,這是筆者最先想到的解決方法,棄用for語句。希望讀者有更好的遞迴演算法。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29876893/viewspace-1868992/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Josephus問題解決方法四(迴圈陣列)陣列
- Josephus問題解決方法一
- Josephus問題解決方法二
- Josephus問題解決方法三(單向迴圈連結串列標識法)
- 遞迴解決全排列問題遞迴
- 遞迴思想----解決飲料問題遞迴
- 用棧+回溯+非遞迴解決N皇后問題遞迴
- 遞迴路徑問題遞迴
- python3:遞迴解漢諾塔問題Python遞迴
- 揹包問題的遞迴與非遞迴演算法遞迴演算法
- 約瑟夫(Josephus problem)環問題初探
- 遞迴實現漢諾塔問題遞迴
- 原:八皇后問題的遞迴和非遞迴Java實現遞迴Java
- SERVICE問題解決方法
- 經典遞迴解決漢諾塔!遞迴
- 解決問題通用方法論
- As常見問題解決方法
- 遇到問題的解決方法
- "undefined reference to" 問題解決方法Undefined
- 問題解決方法有三
- js使用遞迴回溯法解八皇后問題程式碼分享JS遞迴
- rake 任務引數傳遞問題解決
- css高度塌陷問題解決方法CSS
- **PHPNotice:Undefinedindex:…問題的解決方法PHPUndefinedIndex
- windows xp共享問題解決方法Windows
- MYSQL亂碼問題解決方法MySql
- 解決CORS跨域不能傳遞cookies的問題CORS跨域Cookie
- 解決問題的方法和途徑-問題管理
- 第七章 遞迴、DFS、剪枝、回溯等問題 ------------- 7.3 題解:機器人走方格問題遞迴機器人
- 解決「問題」,不要解決問題
- leetcode題解(遞迴和回溯法)LeetCode遞迴
- C#中漢諾塔問題的遞迴解法C#遞迴
- 藍橋杯第五屆JavaC組楊輝三角問題解決方法Java
- 如何在 iOS 中解決迴圈引用的問題iOS
- 遞迴演算法程式設計整數因子分解問題的遞迴演算法遞迴演算法程式設計
- ch2_8_3求解迴文序列問題(遞迴實現)遞迴
- java中亂碼問題解決方法Java
- Nacos 常見問題及解決方法