我被雇主给出了一个测验,以确定我作为程序员的能力,测试或多或少是“编写一个计算此链表长度的函数”。我没有通过测验,因为无论出于什么原因我的功能都没有返回任何东西(这是一个定时的测验)。这是我的代码。
class IntList{
var $value = 1;
var $next = null;
}
$A = new IntList();
$B = new IntList();
$C = new IntList();
$D = new IntList();
$A->next = $B;
$B->next = $C;
$C->next = $D;
main($A);
$count = 0;
function main($L)
{
global $count;
$final = getListLength($L, $count);
print $final;
}
function getListLength($L, $count)
{
if (isset($L->next))
{
$count++;
getListLength($L->next, $count);
} else
{
print $count;
return $count;
}
}
getListLength中的当我在return语句之前打印计数时,我得到3。但是在函数返回后我没有输出。我现在觉得很蠢。有什么想法吗?
答案 0 :(得分:1)
假设这是测验中的代码(argh,PHP4 - '):
class IntList{
var $value = 1;
var $next = null;
}
$A = new IntList();
$B = new IntList();
$C = new IntList();
$D = new IntList();
$A->next = $B;
$B->next = $C;
$C->next = $D;
我认为你不需要递归来解决这个问题。你可以:
function getListLength($list) {
$count = 0;
$item = $list;
while($item instanceof IntList) {
$count++;
$item = $item->next;
}
return $count;
}
答案 1 :(得分:0)
你忘了把$count++
放在第二个函数中。
另外,如果你想计算最后一个,你应该将function getListLength($L, &$count){...}
移到条件之外。
或者,您可以通过引用传递$ count变量
var userChoice;
while (!~["rock", "paper", "scissors", "rope"].indexOf(userChoice)) {
userChoice = prompt("Sorry invalid input, please enter either: rock, paper,scissors, or rope.");
}
答案 2 :(得分:0)
由于你试图在这里使用递归,我认为唯一缺少的是你的递归情况没有返回。你真的不应该需要全球化。如果您需要从零开始,则可以为getListLength
提供默认计数,或在main
中明确地将其称为零。
function main($L) {
$final = getListLength($L);
print $final;
}
function getListLength($L, $count = 0) {
if (isset($L->next)) {
$count++;
// this case should return
return getListLength($L->next, $count);
} else {
return $count;
}
}