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 相关文章推荐
将数字格式的计算结果转为汉字格式
Oct 09 PHP
PHP添加MySQL数据记录代码
Jun 07 PHP
在PHP中利用wsdl创建标准webservice的实现代码
Dec 07 PHP
PHP number_format() 函数定义和用法
Jun 01 PHP
PHP IE中下载附件问题解决方法
Jan 07 PHP
php header函数的常用http头设置
Jun 25 PHP
Yii框架实现图片上传的方法详解
May 20 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
实例讲解PHP验证邮箱是否合格
Jan 28 PHP
PHP设计模式之观察者模式定义与用法分析
Apr 04 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
Oct 14 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 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 define()函数以及defined()函数的用法详解
2013/06/05 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
2013/06/14 PHP
浅谈php自定义错误日志
2015/02/13 PHP
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
javascript级联下拉列表实例代码(自写)
2013/05/10 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
js通过元素class名字获取元素集合的具体实现
2014/01/06 Javascript
javascript检查某个元素在数组中的索引值
2016/03/30 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
2016/12/21 Javascript
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
2017/09/28 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
在vue中通过axios异步使用echarts的方法
2018/01/13 Javascript
JavaScript图片处理与合成总结
2018/03/04 Javascript
Vue 组件传值几种常用方法【总结】
2018/05/28 Javascript
从Node.js事件触发器到Vue自定义事件的深入讲解
2020/06/26 Javascript
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
将字典转换为DataFrame并进行频次统计的方法
2018/04/08 Python
Python解决两个整数相除只得到整数部分的实例
2018/11/10 Python
在Pycharm中对代码进行注释和缩进的方法详解
2019/01/20 Python
通过cmd进入python的实例操作
2019/06/26 Python
python requests更换代理适用于IP频率限制的方法
2019/08/21 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
python通过cython加密代码
2020/12/11 Python
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
凯普林包包西班牙官网:Kipling西班牙
2019/04/12 全球购物
数百万免费的图形资源:Freepik
2020/09/21 全球购物
Ruby如何创建一个线程
2013/03/10 面试题
运动会邀请函范文
2014/02/06 职场文书
优秀团支部事迹材料
2014/02/08 职场文书
银行内勤岗位职责
2014/04/09 职场文书
幼儿园安全生产月活动总结
2014/07/05 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
商务英语专业大学生职业生涯规划书
2014/09/14 职场文书
2015年材料员工作总结
2015/04/30 职场文书
python库Tsmoothie模块数据平滑化异常点抓取
2022/06/10 Python