PHP基于遞歸實(shí)現(xiàn)的約瑟夫環(huán)算法示例
本文實(shí)例講述了PHP基于遞歸實(shí)現(xiàn)的約瑟夫環(huán)算法。分享給大家供大家參考,具體如下:約瑟夫環(huán)問(wèn)題:39個(gè)猶太人與Joephu及他的朋友躲到一個(gè)洞中,39個(gè)猶太人決定寧愿死也不要被敵人抓。于是決定了自殺方式,41個(gè)人排成一個(gè)圓......
以下是【金聰采編】分享的內(nèi)容全文:
以下是【金聰采編】分享的內(nèi)容全文:
本文實(shí)例講述了PHP基于遞歸實(shí)現(xiàn)的約瑟夫環(huán)算法。分享給大家供大家參考,具體如下:
約瑟夫環(huán)問(wèn)題: 39 個(gè)猶太人與Josephus及他的朋友躲到一個(gè)洞中,39個(gè)猶太人決定寧愿死也不要被敵人抓。于是決定了自殺方式,41個(gè)人排成一個(gè)圓圈,由第1個(gè)人開(kāi)始報(bào)數(shù),每報(bào)數(shù)到第3人該人就必須自殺。然后下一個(gè)重新報(bào)數(shù),直到所有人都自殺身亡為止。然而Josephus 和他的朋友并不想遵從,Josephus要他的朋友先假裝遵從,他將朋友與自己安排在第16個(gè)與第31個(gè)位置,于是逃過(guò)了這場(chǎng)死亡游戲。
<?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);執(zhí)行結(jié)果:
Array( [15] => 16 [30] => 31)
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》及《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

侵權(quán)舉報(bào)/版權(quán)申訴



