PHP基于遞歸實現的約瑟夫環(huán)算法示例
本文實例講述了PHP基于遞歸實現的約瑟夫環(huán)算法。分享給大家供大家參考,具體如下:
約瑟夫環(huán)問題: 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);
執(zhí)行結果:
Array ( [15] => 16 [30] => 31 )
更多關于PHP相關內容感興趣的讀者可查看本站專題:《PHP數據結構與算法教程》、《php程序設計算法總結》、《PHP數組(Array)操作技巧大全》、《php字符串(string)用法總結》、《PHP常用遍歷算法與技巧總結》及《PHP數學運算技巧總結》
希望本文所述對大家PHP程序設計有所幫助。
- PHP遞歸的三種常用方式
- php遞歸函數三種實現方法及如何實現數字累加
- PHP 無限分類三種方式 非函數的遞歸調用!
- php菜單/評論數據遞歸分級算法的實現方法
- PHP遞歸算法的簡單實例
- PHP基于遞歸算法解決兔子生兔子問題
- PHP基于非遞歸算法實現先序、中序及后序遍歷二叉樹操作示例
- PHP基于二分法實現數組查找功能示例【循環(huán)與遞歸算法】
- PHP實現字符串翻轉功能的方法【遞歸與循環(huán)算法】
- PHP使用遞歸算法無限遍歷數組示例
- php獲得文件夾下所有文件的遞歸算法的簡單實例
- PHP二分查找算法示例【遞歸與非遞歸方法】
- PHP冒泡算法詳解(遞歸實現)
- 關于PHP遞歸算法和應用方法介紹
- PHP遞歸算法的詳細示例分析
- php全排列遞歸算法代碼
- php實現遞歸的三種基本方式
相關文章
mongo Table類文件 獲取MongoCursor(游標)的實現方法分析
本篇文章是對mongo Table類文件 獲取MongoCursor(游標)的實現方法進行了詳細的分析介紹,需要的朋友參考下2013-07-07
php的日期處理函數及uchome的function_coomon中日期處理函數的研究
經常在用php的時候會碰到一個關于時間日期的問題還有時區(qū)差異的問題,以前作項目的時候會把時間搞錯,要么就是提前八小時了,要么那個時間就是驢唇不對馬嘴的,現在我就來深入研究一下這里面的各個函數及其用法2011-01-01

