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中其实也可以用方法链
Nov 10 PHP
PHP spl_autoload_register实现自动加载研究
Dec 06 PHP
PHP正确解析UTF-8字符串技巧应用
Nov 07 PHP
美图秀秀web开放平台--PHP流式上传和表单上传示例分享
Jun 22 PHP
php基础教程
Aug 26 PHP
基于PHP如何把汉字转化为拼音
Dec 11 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
Mar 17 PHP
修改Laravel5.3中的路由文件与路径
Aug 10 PHP
php使用str_replace替换多维数组的实现方法分析
Jun 15 PHP
php如何比较两个浮点数是否相等详解
Feb 12 PHP
PHP随机数函数rand()与mt_rand()的讲解
Mar 25 PHP
浅析PHP7 的垃圾回收机制
Sep 06 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 默默经典版本
2009/08/04 PHP
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
推荐一本PHP程序猿都应该拜读的书
2014/12/31 PHP
Yii2中SqlDataProvider用法示例
2016/09/22 PHP
JQuery从头学起第三讲
2010/07/06 Javascript
采用call方式实现js继承
2014/05/20 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
跟我学习javascript的for循环和for...in循环
2015/11/18 Javascript
Underscore源码分析
2015/12/30 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
2016/05/12 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
js从外部获取图片的实现方法
2016/08/05 Javascript
vue.js表格分页示例
2016/10/18 Javascript
JS实现动态修改table及合并单元格的方法示例
2017/02/20 Javascript
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
Vue2.0结合webuploader实现文件分片上传功能
2018/03/09 Javascript
解决vue.js this.$router.push无效的问题
2018/09/03 Javascript
可能被忽略的一些JavaScript数组方法细节
2019/02/28 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&amp;平移轮播效果
2019/08/16 Javascript
node.js基础知识汇总
2020/08/25 Javascript
[51:34]Ti4主赛事胜者组 DK vs EG 2
2014/07/19 DOTA
详解Django中的form库的使用
2015/07/18 Python
Tensorflow简单验证码识别应用
2017/05/25 Python
Python中应该使用%还是format来格式化字符串
2018/09/25 Python
关于Python作用域自学总结
2019/06/10 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
Python读取分割压缩TXT文本文件实例
2020/02/14 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
Swisse官方海外旗舰店:澳大利亚销量领先,自然健康品牌
2017/12/15 全球购物
售后专员岗位职责
2013/12/08 职场文书
大学生职业生涯规划书
2014/03/14 职场文书
学生党员公开承诺书
2014/05/28 职场文书
爱与责任师德演讲稿
2014/08/26 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
2015年领班工作总结
2015/04/29 职场文书
2015年体检中心工作总结
2015/05/27 职场文书