PHP基于递归实现的约瑟夫环算法示例


Posted in PHP onAugust 27, 2017

本文实例讲述了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程序设计有所帮助。

PHP 相关文章推荐
PHP怎样调用MSSQL的存储过程
Oct 09 PHP
剖析 PHP 中的输出缓冲
Dec 21 PHP
关于尾递归的使用详解
May 02 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
Mar 17 PHP
php使用递归计算文件夹大小
Dec 24 PHP
php抽象类使用要点与注意事项分析
Feb 09 PHP
php时间函数用法分析
May 28 PHP
PHP获取访问页面HTTP状态码的实现代码
Nov 03 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
Jul 04 PHP
Laravel中为什么不使用blpop取队列详析
Aug 01 PHP
PDO::lastInsertId讲解
Jan 29 PHP
PHP命名空间用法实例分析
Sep 04 PHP
PHP实现的简单sha1加密功能示例
Aug 27 #PHP
PHP实现的各类hash算法长度及性能测试实例
Aug 27 #PHP
详解PHP swoole process的使用方法
Aug 26 #PHP
Yii2框架可逆加密简单实现方法
Aug 25 #PHP
PHP5.6新增加的可变函数参数用法分析
Aug 25 #PHP
php变量与JS变量实现不通过跳转直接交互的方法
Aug 25 #PHP
CodeIgniter整合Smarty的方法详解
Aug 25 #PHP
You might like
PHP 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
PHP链接MySQL的常用扩展函数
2014/10/23 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
PHP实现合并两个排序链表的方法
2018/01/19 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
2018/08/17 PHP
js函数使用技巧之 setTimeout(function(){},0)
2009/02/09 Javascript
jquery 获取json数据实现代码
2009/04/27 Javascript
打开新窗口关闭当前页面不弹出关闭提示js代码
2013/03/18 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
2015/08/05 Javascript
详解javascript遍历方式
2015/11/11 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
基于react框架使用的一些细节要点的思考
2017/05/31 Javascript
详解vuex结合localstorage动态监听storage的变化
2018/05/03 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
2019/04/02 Javascript
js实现多图和单图上传显示
2019/12/18 Javascript
Python中设置变量作为默认值时容易遇到的错误
2015/04/03 Python
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
2015/11/05 Python
python多进程实现文件下载传输功能
2018/07/28 Python
利用python将图片版PDF转文字版PDF
2019/05/03 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
基于python实现模拟数据结构模型
2020/06/12 Python
Python 操作 MySQL数据库
2020/09/18 Python
jupyter notebook更换皮肤主题的实现
2021/01/07 Python
美国Lolё官网:购买大胆而美丽的女性运动服装
2017/05/22 全球购物
华为菲律宾官方网站:HUAWEI Philippines
2021/02/23 全球购物
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
优秀小学生家长评语
2014/01/30 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
纪念9.18事变演讲稿
2014/09/14 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
加强作风建设心得体会
2014/10/22 职场文书
大四学生个人总结
2015/02/15 职场文书
MySQL 执行数据库更新update操作的时候数据库卡死了
2022/05/02 MySQL