递归函数在php中很奇怪

时间:2014-04-19 03:45:39

标签: php

当我在PHP中学习递归函数时,我陷入困境。我知道递归函数是那些被自己调用的函数。我的代码是:

function addition_no($x,$y) {
  if($x==0) {
    return $x;
  }
  return addition_no($x+$y);
}
echo addition_no(1,2);

当我尝试执行此代码时,我得到:

  

警告:缺少参数2 for addition_no(),调用   /web/com/13978781902261/main.php在第6行并在中定义   第2行/web/com/13978781902261/main.php

我需要的是通过递归添加两个数字。

3 个答案:

答案 0 :(得分:0)

你可以试试这个

return addition_no($x,$y);

你必须检查递归函数的任何条件,否则它将是无限递归..

答案 1 :(得分:0)

警告是适当的,因为您使用不同的参数结构调用其中的函数。 尝试使用阶乘递归函数来了解它的工作原理:

<?php

// Initiating Recursion
echo factorial(5); 


//Recursive Function Definition with 1 parameter
function factorial($number)
{
    //Break condition for recursion 
    if($number==1)
        return $number;

    //Fetch and Stack Recursion
    return  $number*factorial($number-1);
}

因此,您可以用简单的英语获得基本的递归:

factorial(n) = n x factorial(n-1) = n x (n-1) x factorial(n-2)

对于您的特定情况,您实际上不需要递归,因为您的参数不依赖于先前的参数结果。但是,为了学习,你可以这样做:

<?php

//Summation
function summation($x) {
  if($x==0) {
    return $x;
  }
  return $x+summation($x-1);
}

echo summation(5);



//Summation with 2 step
function summation($x,$y) {
  if($x<1) {
    return $x;
  }
  return $x+summation($x-$y,$y);
}

echo summation(5,2);

答案 2 :(得分:0)

我创建此代码是为了使用递归来汇总数组中的值:

<?php

//values to add
$add = array(5,4,4,6,7);


function addval($add,$pos) {
    if($pos == 0) {
        return $add[0];
    }
    else {
        return $add[$pos] + addval($add,$pos-1);
    }
}
//last position in vector
$last_position = count($add)-1;
echo addval($add, $last_position);
?>