美文网首页程序员初见
递归解决约瑟夫问题

递归解决约瑟夫问题

作者: _这位同学 | 来源:发表于2020-06-18 16:25 被阅读0次

一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。

function digui($monkeys,$m)

{

$count= count($monkeys);//获取数组长度

//判断数组长度是否小于$m,小于则结束递归,返回猴王

if ($count<$m){

return $monkeys[$count-1];

}else {

unset($monkeys[$m - 1]);//淘汰$m位

for ($i=0;$i<$m-1;$i++){

$monkeys[$count+$i]= $monkeys[$i];//把数过的人放到最后

unset($monkeys[$i]);

}

$monkeys = array_values($monkeys);//重置索引

digui($monkeys,$m);

}

}

//$n数组长度,淘汰第$m位

function king($n = 6,$m = 3)

{

$monkeys= range(1,$n);//创建1到n数组

    $a= digui($monkeys,$m);

echo $a;//猴子数量等于1时输出猴子标号,得出猴王

}

king(6,3);

相关文章

  • 递归解决约瑟夫问题

    一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第...

  • 约瑟夫环问题

    参考文章 约瑟夫环之二(用递归的思想解决Josephus问题) 解释 解法 初始情况: 0, 1, 2 ........

  • 具体数学第一章笔记及习题解答

    本章主要探讨了三个问题汉诺塔,直线切分平面,约瑟夫问题,这三个问题都是典型的递归问题,之后介绍了解决递归式的成套方...

  • 约瑟夫问题 递归解法

    约瑟夫问题是个有名的问题:N个人围成一圈,编号由0到N-1,从第一个开始报数,第K个将出局,最后剩下一个人。例如N...

  • 算法学习 - Python(持续更新)

    二分查找法 - 递归实现 约瑟夫环问题 汉诺塔问题(递归) 旋转列表(Python):列表原地修改,参考Leetc...

  • 算法面经---单向循环链表(解决约瑟夫问题)

    单向循环链表--解决约瑟夫问题 一、单向循环链表的应用场景 1.1 问题描述 Josephu(约瑟夫、约瑟夫环) ...

  • josephus 约瑟夫环递归解决分析

    题目:n个人围成一圈(编号从1到n),从第1个人开始报数,报到m的人出列,从下一个人再重新报数,报到m的人出列,如...

  • 前端开发 -- 算法模式(递归和动态规划)

    递归 递归是一种解决问题的方法,它解决问题的各个小部分,直到解决最初的大问题,递归通常涉及到函数的自身调用。递归函...

  • 约瑟夫环问题与递归问题(详解)

    今天呢,阿Q给大家带来一个小故事,那就是著名的约瑟夫问题。公元66年,约瑟夫不情愿地参与领导了犹太同胞反抗罗马统治...

  • 学习递归

    1. 递归 1.1 理解递归 ​ 递归是一种解决问题的方法,它从解决问题的各个小部分中开始,直到解决最...

网友评论

    本文标题:递归解决约瑟夫问题

    本文链接:https://www.haomeiwen.com/subject/eubuxktx.html