PHP编程挑战-代码生成器不接受
PHP中提供了一个数组,其中包含正整数和/或正整数的递归嵌套数组。例如,可以将其初始化为:PHP编程挑战-代码生成器不接受,php,recursion,Php,Recursion,PHP中提供了一个数组,其中包含正整数和/或正整数的递归嵌套数组。例如,可以将其初始化为: $arr = array(array(141,151,161), 2, 3, array(101, 202, array(303,404))); 编写一个函数“function MaxArray($arr)”,返回$arr中包含的最大值或嵌套在$arr中的某个数组。在本例中,返回值应为404 function MaxArray($arr){ static $x = 0; foreac
$arr = array(array(141,151,161), 2, 3, array(101, 202, array(303,404)));
编写一个函数“function MaxArray($arr)”,返回$arr中包含的最大值或嵌套在$arr中的某个数组。在本例中,返回值应为404
function MaxArray($arr){
static $x = 0;
foreach($arr as $array){
if(is_array($array)) $x = MaxArray($array);
else if($array > $x) $x = $array;
}
return $x;
}
//additional output just for testing
$arr = array(array(141,5651,161), 2, 45446, array(101, 202, array(303,4)));
//additional output just for testing
print MaxArray($arr);
每次我运行它时它都会工作,但是在线代码生成器不会接受。这是这一部分的错误还是我
另外,我个人想对stackoverflow上的所有人说声谢谢,这是一个非常棒的网站。四年前,我对编程一无所知,现在我从头开始构建了它,我正在用java编写android应用程序
更新:
这个问题来自我参加的一个在线测试。没有显示错误信息,但是代码生成器只是给出了错误答案的回答。因此,我不适合这个问题
我想在上诉之前检查我的解决方案
# so... this works well enough
$arr = array(array(141,5651,161), 2, 45446, array(101, 202, array(303,4)));
print MaxArray($arr); // outputs 45446
print "\n";
# but now...let's try it again. In the same script. *gasp!*
$arr2 = array(42);
print MaxArray($arr2); // outputs 45446 (!!!)
问题是静态变量;在函数调用之间,它没有被清除。所以以前的结果会影响未来的结果。这几乎肯定是不正确的,并且肯定会导致一个知识渊博的人类法官拒绝您的代码
去掉静态变量。你可以把它作为一个参数传递,你可以简单地与子结果进行比较,就像这里的另一个答案所建议的那样。。。或者你可以用闭包和数组\u walk\u recursive
:)来炫耀一下
为什么对局部变量x
使用static
?在线代码生成器会出现什么错误?但是,您的代码在PHP5.3.10-1ubuntu3.7
@Juhana中对我有效好了,我现在明白了。我只是习惯于使用{}
块,而不是不使用。你能给我一个在线测试的链接吗?@hek2mgl expertrating.com
function MaxArray($arr) {
$max = -1;
array_walk_recursive($arr, function($x) use (&$max) {
if ($x > $max) $max = $x;
});
return $max;
}
<?php
$arr = [[141, 151, 161], 2, 3, [101, 202, [303, 404]]]
/**
* @param $input
* @return int
*/
function getActMax($input)
{
if ( ! is_array($input))
{
return $input;
} else
{
return findMax($input);
}
}
/**
* @param array $inputs
* @return int
*/
function findMax(array $inputs)
{
//Maybe the first item in the list is the biggest, this is our current max value
$max = getActMax(current($inputs));
foreach ($inputs as $v)
{
//If we found a bigger, change our max value
if (getActMax($v) > $max)
{
$max = getActMax($v);
}
}
return (int)$max;
}
var_dump(findMax($arr));