对于前。如果我有一个函数rand(0,2)。我如何建立一个这样的功能
RESC(100,兰特(0,2));
将rand(0,2)的值打印100次?对于这个问题。任何可打印的功能。
我试过了。但似乎没有用。
<?php
function resc($i, $f) {
if ($i != 0) {
print $f;
return resc($i-1, $f);
} else {
print $f;
}
}
resc(4, rand(0, 1));
?>
答案 0 :(得分:4)
如果您只想打印一堆随机的内容:
function resc_int($recursions, callable $func, $args = array()) {
for($i = 0; $i < $recursions; $i++) {
echo call_user_func_array($func, $args);
}
}
// resc_int(100, "rand", array(0, 1));
完全未经测试。警告Lector。
这种方法的工作方式是不使用递归(它将使用越来越多的内存,你有更多的递归,因为你不能用活动引用垃圾收集一些东西,否则你将在PHP中获得分段错误,如果它尝试访问它),它使用迭代。
从某种意义上说,有两种“循环”。
技术上,递归是一个循环,因为你继续递归直到达到停止条件(否则你会得到一个无限循环,这对于相当痛苦的原因是不好的)。 PHP中的循环结构是{{1}}。
在几乎所有情况下(除非你有非常好的理由),当你需要循环的东西时,这总是更好的选择。简单地说,迭代是向上或向下计数到目标整数。这是while()
构造;因此,也是for()
构造,它使用数组中的元素数作为目标整数,然后计算它,从数组中挑选元素。
这样可以提高内存效率,并且非常容易在PHP中使用。它也可以无限循环,就像可以(只是给它一个不可能的条件来努力),所以要小心。
简而言之:享受标准库(几乎每个你经常需要的功能都在某处),并记住递归是你的 last 选项,而不是第一个。
答案 1 :(得分:0)
function resc($times, $cbFtn, Array $cbFtnArgs = array()) {
if ($times != 0) {
print call_user_func_array($cbFtn, $cbFtnArgs);
resc($times - 1, $cbFtn, $cbFtnArgs);
}
}
resc(4, 'rand', array(0, 1));