[英]Passing arrays to functions PHP
我刚开始学习PHP,遇到了以下代码,我很难理解:
<?php
function f($v, $n) {
if ($n <= 0) return 1;
else
return $v[$n-1] * f($v, $n-2) + 1;
}
$a = array(0,1,2,3);
print (f($a, 4));
?>
该脚本返回值7。由于$v
是一个数组,我无法理解f($v, $n-2)
部分如何返回值2。 我是否应该放入$v[number]
类的东西,使其具有值? 命令echo "$a"
(或$ v)和print($a)
返回“ array”消息,后跟PHP通知。
在这种情况下, $v
获得什么价值?
非常感谢!
是的,因此您的$ f()是lambda函数,因此可以通过仅调用关联的值来触发。
在数组中,您有4个位置从0到3;
当您执行以4为索引的lambda时,将发生以下情况:
对于索引4
v [(4-1)] = 3
3 * f($v, (4-2)) + 1
f($ v,(4-2))
v [(2-1)] = 1
1 * f($v, (2-2)) + 1
f($ v,(2-2))
如果被触发为$ n <=0。自动返回1;否则返回0。
因此,将它们从下到上放在一起,您将拥有:
3 *(1 * 1 +1)+1
遵循数学规则,首先解决括号下的内容,然后相乘,然后求和:
3 * 2 +1 = 6 +1 = 7
希望一切都清楚!
该函数被递归调用。 这是函数调用背后的公式在幕后的样子:
3 * (1 * (1) + 1) + 1
括号内的值是递归调用的结果。
结果是7 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.