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 xml-rpc远程调用
Dec 19 PHP
php使用mkdir创建多级目录入门例子
May 10 PHP
php发送短信验证码完成注册功能
Nov 24 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
Dec 18 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
Dec 31 PHP
比较完整的微信开发php代码
Aug 02 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
Nov 05 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
Nov 07 PHP
给大家分享几个常用的PHP函数
Jan 15 PHP
Laravel框架控制器,视图及模型操作图文详解
Dec 04 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
Nov 19 PHP
Laravel5.1 框架响应基本用法实例分析
Jan 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
用javascript实现页面打印的三种方法
2007/03/05 Javascript
javascript实现的网页局布刷新效果
2008/12/01 Javascript
整理8个很棒的 jQuery 倒计时插件和教程
2011/12/12 Javascript
JavaScript对象之深度克隆介绍
2014/12/08 Javascript
JavaScript 对象深入学习总结(经典)
2015/09/29 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
JavaScript中函数声明与函数表达式的区别详解
2016/08/18 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
EasyUI学习之Combobox级联下拉列表(2)
2016/12/29 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
vue中appear的用法
2017/08/17 Javascript
vue无限轮播插件代码实例
2019/05/10 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
2019/09/12 Javascript
p5.js实现简单货车运动动画
2019/10/23 Javascript
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
python实现网页链接提取的方法分享
2014/02/25 Python
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
python 禁止函数修改列表的实现方法
2017/08/03 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
python cx_Oracle的基础使用方法(连接和增删改查)
2017/11/19 Python
用Python写一段用户登录的程序代码
2018/04/22 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
详解Python中的文件操作
2021/01/14 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
详解CSS3:overflow属性
2020/11/17 HTML / CSS
安纳塔拉酒店度假村及水疗官方网站:Anantara Hotel
2016/08/25 全球购物
Vero Moda西班牙官方购物网站:丹麦BESTSELLER旗下知名女装品牌
2018/04/27 全球购物
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
医学生实习自荐信
2013/10/01 职场文书
数控技术专业毕业自荐书范文
2014/02/05 职场文书
工作建议书范文
2014/05/13 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
企业财务经理岗位职责
2015/04/08 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android