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实例分享之二维数组排序
May 15 PHP
PHP中构造函数和析构函数解析
Oct 10 PHP
页面利用渐进式JPEG来提升用户体验度
Dec 01 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
Dec 25 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
Dec 30 PHP
CakePHP框架Session设置方法分析
Feb 23 PHP
PHP两种实现无级递归分类的方法
Mar 02 PHP
老生常谈PHP面向对象之命令模式(必看篇)
May 24 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
Laravel事件监听器用法实例分析
Mar 12 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
Aug 14 PHP
关于laravel 日志写入失败问题汇总
Oct 17 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仿discuz分页效果代码
2008/10/02 PHP
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
如何解决CI框架的Disallowed Key Characters错误提示
2013/07/05 PHP
浅谈mysql_query()函数的返回值问题
2016/09/05 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
jquery BS,dialog控件自适应大小
2009/07/06 Javascript
jquery中实现标签切换效果的代码
2011/03/01 Javascript
javascript 主动派发事件总结
2011/08/09 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
JavaScript 拖拽实例代码
2016/09/21 Javascript
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
JavaScript中展开运算符及应用的实例代码
2021/01/14 Javascript
python线程池的实现实例
2013/11/18 Python
python回调函数用法实例分析
2015/05/09 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
Python解析json代码实例解析
2019/11/25 Python
python实现最短路径的实例方法
2020/07/19 Python
HTML5之WebGL 3D概述(上)—WebGL原生开发开启网页3D渲染新时代
2013/01/31 HTML / CSS
大学生农村教师实习自我鉴定
2013/09/21 职场文书
大学生村官工作感言
2014/01/10 职场文书
2014年助理工程师工作总结
2014/11/14 职场文书
华山导游词
2015/02/03 职场文书
党风廉政建设个人总结
2015/03/06 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
小学数学新课改心得体会
2016/01/22 职场文书
MySQL 8.0 Online DDL快速加列的相关总结
2021/06/02 MySQL
React列表栏及购物车组件使用详解
2021/06/28 Javascript
Python中request的基本使用解决乱码问题
2022/04/12 Python
Python数据可视化之Seaborn的安装及使用
2022/04/19 Python