2017-10-05 53 views
1

假设我们有一个字符串“Hello,PHP”,并且我们想用递归函数重复三次 。php递归函数打印字符串3次不起作用

所以我已经试过这样:

$initialString = "Hello, PHP"; 
$myFunc = function(&$myFunc, $n = 3, $initialString){ 
    if($n >= 0){ 
     $temp = $myFunc($myFunc, $n - 1, $initialString); 
     $initialString .= ", " . $initialString; 
     return $temp; 
    } 

    return $initialString; 
}; 

它不工作,我不能打印。

+2

什么是 “不工作的平均”?请具体阅读并阅读:https://stackoverflow.com/help/mcve –

+0

您是否尝试过'echo $ myFunc'? – Swellar

回答

1

与递归操作的问题是,要调用的递归函数上您的变量将你的修改之前,

当$ N = 3,您将通过递归基地if($n >= 0){并立即您将调用递归在对$initialstring进行任何修改之前再次起作用。

所以$n = 2现在,递归基地将被传递,并再次在任何修改前的$initialstring你将返回递归函数,将还在做同样的行为,直到它返回$initialstring没有任何修饰

你需要的所有东西都是在递归调用之前移动$initialString .= ", " . $initialString;

$initialString = "Hello, PHP"; 
$myFunc = function(&$myFunc, $n = 3, $initialString){ 
    if($n >= 0){ 
     $initialString .= ", " . $initialString; 
     $temp = $myFunc($myFunc, $n - 1, $initialString); 
     return $temp; 
    } 

    return $initialString; 
}; 

活生生的例子:https://3v4l.org/Aa2Rd

需要注意的是,在这种情况下,你不会得到字符串“Hello,PHP” 3次,那是因为你是递归的字符串修改的串联

0

很少有问题。

在从传入的计数器中取1之前检查> = 0,因此程序重复4次。

您在调用函数后操作字符串,但在此之后,您对字符串不做任何操作。如果你在调用之前操作字符串,那么你更快地添加项目(当你通过重复的字符串,然后重复重复的字符串,等等)

可能下面会为你做,没有返回,如果它有已经超过了计数。

$initialString = "Hello PHP"; 
$myFunc = function($n = 3, $initialString) use (&$myFunc) { 
    if($n > 0){ 
     $temp = $initialString . "," . $myFunc($n - 1, $initialString); 
     return $temp; 
    } 

    return ''; 
}; 

echo $myFunc(3, $initialString); 
0

请试试这个:

$initialString = "Hello, PHP"; 
$n=3; 
function printtr($initialString, $n) 
{ 
    if ($n==0) 
    { 
     exit; 
    } 
    echo $initialString."<br/>"; 
    $n = $n-1; 
    printtr($initialString, $n); 
} 
printtr($initialString, $n);