递归函数在php中的行为很奇怪
当我学习PHP中的递归函数时,我陷入了困境。我知道递归函数是那些被自己调用的函数。我的代码是:递归函数在php中的行为很奇怪,php,Php,当我学习PHP中的递归函数时,我陷入了困境。我知道递归函数是那些被自己调用的函数。我的代码是: function addition_no($x,$y) { if($x==0) { return $x; } return addition_no($x+$y); } echo addition_no(1,2); 当我尝试执行此代码时,我得到: 警告:缺少用于添加的参数2。\u no,已调用 /第6行的web/com/13978781902261/main.php,在中定义 /第
function addition_no($x,$y) {
if($x==0) {
return $x;
}
return addition_no($x+$y);
}
echo addition_no(1,2);
当我尝试执行此代码时,我得到:
警告:缺少用于添加的参数2。\u no,已调用
/第6行的web/com/13978781902261/main.php,在中定义
/第2行的web/com/13978781902261/main.php
我需要的是通过递归添加两个数字。你可以试试这个
return addition_no($x,$y);
您必须检查递归函数的任何条件,否则它将是无限递归。当您使用不同的参数结构调用其内部的函数时,警告是适当的。 尝试阶乘递归函数了解其工作原理:
<?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);
}
对于您的特定情况,您实际上不需要递归,因为您的参数不依赖于前面的参数结果。但是,为了学习,您可以这样做:
<?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);
我创建此代码是为了使用递归性总结数组中的值:
<?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);
?>
这将导致无限递归为什么这里需要递归?这是一种家庭作业吗?不..我只是想了解重新创建函数如何工作尝试将函数声明更改为函数添加\u no$x,$y=null{,那样的话,参数2是可选的,这将允许返回加法\u no$x+$y;成为对函数的有效调用。注意,返回加法\u no$x+$y;将导致无限递归,因为$x+$y永远不会使$x==0您的代码不起作用…很抱歉,这很有帮助…谢谢老兄..为什么要创建count$add-1?因为向量中的最后一个位置是H5元素是从零开始的4个位置,计数函数给出元素总数5。顺便说一句,这是一个数组和,不符合我的问题。无论如何,别担心,我已经接受了
<?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);
?>