从不同的“同一类的方法”中调用递归“类的方法”

从不同的“同一类的方法”中调用递归“类的方法”

问题描述:

我问了this question before,有人给我解释了一个链接什么是递归函数是他/她投票否定等,如在真实递归函数,所有其他人投我负。从不同的“同一类的方法”中调用递归“类的方法”

现在我再次问,我应该怎么称呼递归“一类的方法”从不同“同一个类的方法”?虽然这样做递归在第一个“递归方法”的定义,我应该用$this->method()或只是method()

感谢;)(我把它叫做一个类的方法,以避免那些谁与底片杀说“功能” )

+3

递归调用方法与调用另一个方法没有区别。 – 2013-03-03 17:57:48

+1

'$ this-> method()' – 2013-03-03 18:00:21

你可以像调用任何其他方法一样递归地调用一个方法 - 它只是在你自己内部调用方法。

例如,看看下面:

class A 
{ 

    public function b($i = 0) 
    { 

    echo ++$i; 

    if ($i < 10) 
    { 
     $this->b($i); 
    } 

    } 

} 

$a = new A; 

$a->b(); 

这将打印出数字1到10,然后停止。

如果你想变得聪明,而不是使用$this->b($i);,你可以使用$this->{__FUNCTION__}($i);。然后,如果您希望在某个时间点重新命名该方法(或将方法内容复制到别处),则不必搜索并重命名每个递归调用。

+0

非常感谢你的例子。我的疑问是因为我的脚本在调用递归函数时停止了...所以它必须是一个不同的问题;) – 2013-03-03 18:09:32

+1

如果您将该方法与实际输入值一起发布,这将会很有帮助。我注意到在递归方法调用之前有'return',因此它似乎可能从一开始就满足它们的条件(作为一个新问题,我建议)。 – MichaelRushton 2013-03-03 18:11:28

+0

谢谢:)无论如何我会检讨一切(之前问更多的愚蠢) – 2013-03-03 18:25:54

function methodOne(someInteger){  
    return methodTwo(someInteger);  
} 

function methodTwo(someInteger){  
    if(someInteger == 0){ 
     return 1; 
    } 
    else{ 
    return someInteger*methodTwo(someInteger-1); 
    } 
} 

这是回答您的问题吗?

+0

是的,它的确如此。万分感谢! :D很好。 – 2013-03-03 18:10:48

我的答案肯定是在两年后!我只希望这对其他人有用。这里是我的解决方案:

class Factorial 
    { 
    protected $number; 

    public function __construct($number) 
    { 
     $this->number = $number; 
    } 

    public function getFactorial() 
    { 
     if ($this->number < 2) { 
     return 1; 
     } 

    else { 
     return $this->number * ($this->getFactorial($this->number -=1)); 
    } 
} 

} 

$factorial = new Factorial(4); 
echo $factorial->getfactorial(); 

,你可以换一个try catch块内的逻辑,以确保输入的号码确实是一个整数。