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学习教程之第1天
Jun 15 PHP
PHP 处理图片的类实现代码
Oct 23 PHP
PHP 创建文件(文件夹)以及目录操作代码
Mar 04 PHP
php-cli简介(不会Shell语言一样用Shell)
Jun 03 PHP
php中Session的生成机制、回收机制和存储机制探究
Aug 19 PHP
PHP Hash算法:Times33算法代码实例
May 13 PHP
PHP实现的简单AES加密解密算法实例
May 29 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 PHP
PHP中Static(静态)关键字功能与用法实例分析
Apr 05 PHP
PHP大文件切割上传功能实例分析
Jul 01 PHP
Windows服务器中PHP如何安装redis扩展
Sep 27 PHP
PHP SESSION跨页面传递失败解决方案
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
一个SQL管理员的web接口
2006/10/09 PHP
Windows下编译PHP5.4和xdebug全记录
2015/04/03 PHP
PHP PDOStatement::errorInfo讲解
2019/01/31 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
关于图片验证码设计的思考
2007/01/29 Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
IE6-8中Date不支持toISOString的修复方法
2014/05/04 Javascript
js事件绑定快捷键以ctrl+k为例
2014/09/30 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
2015/01/02 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
JavaScrip常见的一些算法总结
2015/12/28 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
2016/05/09 Javascript
Node.js的基本知识简单汇总
2016/09/19 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
2016/11/10 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
angular.js实现购物车功能
2017/10/23 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
JS通过识别id、value值对checkbox设置选中状态
2020/02/19 Javascript
JavaScript 严格模式(use strict)用法实例分析
2020/03/04 Javascript
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
python实现堆栈与队列的方法
2015/01/15 Python
python中for语句简单遍历数据的方法
2015/05/07 Python
python编程实现归并排序
2017/04/14 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
使用 django orm 写 exists 条件过滤实例
2020/05/20 Python
python网络爬虫实现发送短信验证码的方法
2021/02/25 Python
用css3制作纸张效果(外翻卷角)
2013/02/01 HTML / CSS
三好学生自我鉴定
2013/12/17 职场文书
师范生自荐信模板
2014/05/28 职场文书
关于元旦的广播稿2016
2015/12/17 职场文书
关于办理居住证的介绍信模板
2019/11/27 职场文书
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android
海弦WR-800F
2022/04/05 无线电
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS