本文實例講述了PHP基于遞歸實現的約瑟夫環算法。分享給大家供大家參考,具體如下:
約瑟夫環問題: 39 個猶太人與Josephus及他的朋友躲到一個洞中,39個猶太人決定寧愿死也不要被敵人抓。于是決定了自殺方式,41個人排成一個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺。然后下一個重新報數,直到所有人都自殺身亡為止。然而Josephus 和他的朋友并不想遵從,Josephus要他的朋友先假裝遵從,他將朋友與自己安排在第16個與第31個位置,于是逃過了這場死亡游戲。
<?php$num = 41;$step = 3;function joseph($arr, $step, $start, $survivors){ foreach($arr as $k => $v) { if($start % $step === 0) { unset($arr[$k]); $start = 1; } else { $start ++; } } if(count($arr) > $survivors) return joseph($arr, $step, $start, $survivors); else return $arr;}$i = 0;$arr = [];while($i ++ < $num){ $arr[] = $i;}$arr = joseph($arr, 3, 1, 2);print_r($arr);
執行結果:
Array( [15] => 16 [30] => 31)
希望本文所述對大家PHP程序設計有所幫助。
新聞熱點
疑難解答
圖片精選