php递归函数无法正常工作

时间:2016-06-28 23:20:28

标签: php recursion

我正在运行一个函数,其中一部分需要选择一个随机数,但是,它不能在已经选择的数字的数组中。因此,如果选择的随机数在数组中,则需要选择一个新数字。我似乎真的在努力寻找看起来那么容易的东西

function choice() {
global $countries;
global $count;
global $answers;
global $choice;
$i = rand(0,$count-1);
if(in_array($i,$answers)) choice();
else {
    $answers[] = $i;
    $choice = $countries[$i]['capital_city'];
    return $choice;
}

所以这里的当前逻辑是,它选择一个随机数,检查它是否在数组中,如果不是那么它设置变量并返回它,如果是,则通过重新启动函数生成一个新数字。发生的事情是当它在功能中找到一个时,它会返回一个空结果,而不是通过该函数返回。我做错了什么?

2 个答案:

答案 0 :(得分:2)

如果你不需要使用resursion,你不能只使用while循环吗?

function choice() {
    global $countries;
    global $count;
    global $answers;
    global $choice;

    $i = rand(0,$count-1);

    while ( in_array($i,$answers) ){    
        $i = rand(0,$count-1);
    }

    $answers[] = $i;
    $choice = $countries[$i]['capital_city'];
    return $choice;
}

或者使用此do while取代while;

do {
    $i = rand(0,$count-1);
} while ( in_array($i,$answers) );

答案 1 :(得分:1)

在递归调用之前添加return语句。

function choice() {
    global $countries;
    global $count;
    global $answers;
    global $choice;

    $i = rand(0,$count-1);

    if(in_array($i,$answers)) return choice();
    else {
        $answers[] = $i;
        $choice = $countries[$i]['capital_city'];
        return $choice;
    }