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 相关文章推荐
在PHP3中实现SESSION的功能(三)
Oct 09 PHP
PHP之变量、常量学习笔记
Mar 27 PHP
Gregarius中文日期格式问题解决办法
Apr 22 PHP
php-accelerator网站加速PHP缓冲的方法
Jul 30 PHP
PHP Mysql编程之高级技巧
Aug 27 PHP
PHP使用xmllint命令处理xml与html的方法
Dec 15 PHP
php微信公众平台开发之微信群发信息
Sep 13 PHP
Laravel5.1自定义500错误页面示例
Oct 09 PHP
Yii2数据库操作常用方法小结
May 04 PHP
php使用curl伪造来源ip和refer的方法示例
May 08 PHP
PHP延迟静态绑定使用方法实例解析
Sep 05 PHP
PHP数组实际占用内存大小原理解析
Dec 11 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不用内置函数对数组排序的两个算法代码
2010/02/08 PHP
php file_get_contents函数轻松采集html数据
2010/04/22 PHP
php中文验证码实现方法
2015/06/18 PHP
谈谈PHP连接Access数据库的注意事项
2016/08/12 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
2016/09/21 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
javascript attachEvent绑定多个事件执行顺序问题
2010/10/20 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
打造自己的jQuery插件入门教程
2016/09/23 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
浅谈原型对象的常用开发模式
2017/07/22 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
2018/04/18 Javascript
深入理解JS的事件绑定、事件流模型
2018/05/13 Javascript
Angular刷新当前页面的实现方法
2018/11/21 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
详解在React-Native中持久化redux数据
2019/05/22 Javascript
浅谈python正则的常用方法 覆盖范围70%以上
2018/03/14 Python
简单谈谈python基本数据类型
2018/09/26 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
C面试题
2015/10/08 面试题
我们的节日清明节活动总结
2014/04/30 职场文书
建筑安全责任书范本
2014/07/24 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书
假期安全教育广播稿
2014/10/04 职场文书
活动总结书怎么写
2015/05/11 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
JavaScript继承的三种方法实例
2021/05/12 Javascript
MySQL创建管理RANGE分区
2022/04/13 MySQL
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers