龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

约瑟夫环递归和非递归解法

时间:2014-07-22 14:50来源: 作者: 点击:
分享到:
写点小算法题练练手,两种方法解决约瑟夫环问题。 br / 一种递归的,一种非递归的。
写点小算法题练练手,两种方法解决约瑟夫环问题。
一种递归的,一种非递归的。
<?php
/**
 * 递归
 */
function king($arr,$n,$i)
{
	if(count($arr) == 1)
	{
		return $arr;
	}
	foreach($arr as $k=>$v)
	{
		if($i== $n)
		{
			array_shift($arr);
			$i = 1; // 重新开始
		}else
		{
			$of1 = array_shift($arr);
			array_push($arr,$of1);
			$i++;  // 指针移动
		}
		return king($arr,$n,$i);
		
	}
}
$i = 1;
$arr = array(1,2,3,4,5,6,7,8,9,10);
$king = king($arr,5,$i);
print_r($king);
// output Array ( [0] => 3 )

2. [文件] test8.php ~ 339B     下载(18)     跳至 [1] [2] [全屏预览]

<?php
/**
 * 循环
 */
function king($arr ,$n)
{
	$i = 0 ;   
	while(count($arr)>1)
	{
	   if(($i+1)%$n ==0) 
	   {
	   	 unset($arr[$i]) ;
	   } 
	   else 
	   {
	   	 unset($arr[$i]) ;
	   }
	   $i++ ;
	}
return $arr ;
}
$arr = array(1,2,3,4,5,6,7,8,9,10);
print_r(king($arr,5));
// output Array ( [45] => 3 )

精彩图集

赞助商链接