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 相关文章推荐
Search Engine Friendly的URL设计
Oct 09 PHP
php入门小知识
Mar 24 PHP
UCenter中的一个可逆加密函数authcode函数代码
Jul 20 PHP
一个简单的网页密码登陆php代码
Jul 17 PHP
解析php中获取url与物理路径的总结
Jun 21 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
Jun 05 PHP
PHP GD库生成图像的几个函数总结
Nov 19 PHP
php中http与https跨域共享session的解决方法
Dec 20 PHP
分享常见的几种页面静态化的方法
Jan 08 PHP
8个必备的PHP功能开发
Oct 02 PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
Oct 24 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实现水仙花数的4个示例分享
2014/04/08 PHP
php出现内存位置访问无效错误问题解决方法
2014/08/16 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
js constructor的实际作用分析
2011/11/15 Javascript
两种常用的javascript数组去重方法思路及代码
2013/03/26 Javascript
PHP 数组current和next用法分享
2015/03/05 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
AngularJS基础 ng-keyup 指令简单示例
2016/08/02 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
微信公众号 客服接口的开发实例详解
2016/09/28 Javascript
JS实现数组去重复值的方法示例
2017/02/18 Javascript
js模拟微博发布消息
2017/02/23 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
vue项目实战总结篇
2018/02/11 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
2018/09/03 jQuery
Vue $emit $refs子父组件间方法的调用实例
2018/09/12 Javascript
微信小程序自定义导航栏实例代码
2019/04/05 Javascript
vue-mugen-scroll组件实现pc端滚动刷新
2019/08/16 Javascript
vue实现扫码功能
2020/01/17 Javascript
基于vue-cli3+typescript的tsx开发模板搭建过程分享
2020/02/28 Javascript
NestJs使用Mongoose对MongoDB操作的方法
2021/02/22 Javascript
[54:02]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 IG vs VGJ.T
2018/04/03 DOTA
python 中文乱码问题深入分析
2011/03/13 Python
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
python创建一个最简单http webserver服务器的方法
2015/05/08 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
python爬虫 urllib模块发起post请求过程解析
2019/08/20 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
python实现npy格式文件转换为txt文件操作
2020/07/01 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
一套SQL笔试题
2016/08/14 面试题
《雨点》教学反思
2014/02/12 职场文书
《争吵》教学反思
2014/02/15 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书