Php 如何递归函数本身?

Php 如何递归函数本身?,php,Php,例如,如果我有一个函数rand(0,2)。如何构建这样的函数 resc(100,rand(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(

例如,如果我有一个函数rand(0,2)。如何构建这样的函数

resc(100,rand(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));
?>

如果您只想打印一组随机整数:

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));
函数resc_int($recursions,可调用$func,$args=array()){
对于($i=0;$i<$recursions;$i++){
echo调用用户函数数组($func,$args);
}
}
//resc_int(100,“rand”,数组(0,1));
完全未经测试。警告选择器

其工作方式是,它使用迭代,而不是使用递归(递归越多,它将使用越来越多的内存,因为你不能用活动引用垃圾收集某些内容,或者如果它试图访问它,你将在PHP中遇到分段错误)

在某种意义上有两种“循环”

循环/递归。 从技术上讲,递归是一个循环,因为您将继续递归,直到达到停止条件(否则您将得到一个无限循环,这对于相当痛苦的原因来说是不好的)。PHP中的循环结构是
while()

迭代 在几乎每一种情况下(除非你有很好的理由),当你需要循环的东西时,这总是更好的选择。简单地说,迭代就是向上或向下计数到一个目标整数。这是()的
for
构造;因此,还有
foreach()
构造,它使用数组中的元素数作为目标整数,然后对其计数,在数组运行时从数组中拾取元素

这更节省内存,并且在PHP中非常容易使用。它也可以无限循环,就像while可以(只是给它一个不可能的条件),所以要小心


简而言之:享受标准库的乐趣(几乎你经常需要的每个函数都在那里的某个地方),记住递归是你的最后一个选项,而不是第一个。

如果你只想打印一堆随机整数:

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));
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));
函数resc_int($recursions,可调用$func,$args=array()){
对于($i=0;$i<$recursions;$i++){
echo调用用户函数数组($func,$args);
}
}
//resc_int(100,“rand”,数组(0,1));
完全未经测试。警告选择器

其工作方式是,它使用迭代,而不是使用递归(递归越多,它将使用越来越多的内存,因为你不能用活动引用垃圾收集某些内容,或者如果它试图访问它,你将在PHP中遇到分段错误)

在某种意义上有两种“循环”

循环/递归。 从技术上讲,递归是一个循环,因为您将继续递归,直到达到停止条件(否则您将得到一个无限循环,这对于相当痛苦的原因来说是不好的)。PHP中的循环结构是
while()

迭代 在几乎每一种情况下(除非你有很好的理由),当你需要循环的东西时,这总是更好的选择。简单地说,迭代就是向上或向下计数到一个目标整数。这是()的
for
构造;因此,还有
foreach()
构造,它使用数组中的元素数作为目标整数,然后对其计数,在数组运行时从数组中拾取元素

这更节省内存,并且在PHP中非常容易使用。它也可以无限循环,就像while可以(只是给它一个不可能的条件),所以要小心


简而言之:享受标准库的乐趣(几乎你经常需要的每个函数都在那里的某个地方),记住递归是你的最后一个选项,而不是第一个。

你需要递归吗?循环呢?你只是错过了函数中的一个循环。@DrixsonOseña递归是一个带有停止条件的隐式循环。从技术上讲,您不需要像while或for循环这样的显式循环。@SaiKrishnaDeep您可以编写一个将另一个函数作为回调函数的函数。该函数不必是递归的,就可以工作。通常,只有在确实需要时才使用递归。在包括PHP在内的大多数语言中,它都是一个内存占用器。@saikrisnadeep循环和迭代之间有区别。一个重复,直到堆栈变旧并损坏,另一个为给定值(foreach和for是迭代器,而()是循环,递归是结构良好的代码不特别需要的)增加一个计数器。是否需要递归?循环呢?你只是错过了函数中的一个循环。@DrixsonOseña递归是一个带有停止条件的隐式循环。从技术上讲,您不需要像while或for循环这样的显式循环。@SaiKrishnaDeep您可以编写一个将另一个函数作为回调函数的函数。该函数不必是递归的,就可以工作。通常,只有在确实需要时才使用递归。在包括PHP在内的大多数语言中,它都是一个内存占用器。@saikrisnadeep循环和迭代之间有区别。一个重复,直到堆栈变旧并损坏,另一个为给定的值增加一个计数器(foreach和for是迭代器,而()是循环,递归对于结构良好的代码来说并不特别需要)为什么将参数默认为无效的东西?为什么将参数默认为无效的东西?
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));