从不同的“同一类的方法”中调用递归“类的方法”
我问了this question before,有人给我解释了一个链接什么是递归函数是。 他/她投票否定等,如在真实递归函数,所有其他人投我负。从不同的“同一类的方法”中调用递归“类的方法”
现在我再次问,我应该怎么称呼递归“一类的方法”从不同“同一个类的方法”?虽然这样做递归在第一个“递归方法”的定义,我应该用$this->method()
或只是method()
感谢;)(我把它叫做一个类的方法,以避免那些谁与底片杀说“功能” )
你可以像调用任何其他方法一样递归地调用一个方法 - 它只是在你自己内部调用方法。
例如,看看下面:
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);
。然后,如果您希望在某个时间点重新命名该方法(或将方法内容复制到别处),则不必搜索并重命名每个递归调用。
非常感谢你的例子。我的疑问是因为我的脚本在调用递归函数时停止了...所以它必须是一个不同的问题;) – 2013-03-03 18:09:32
如果您将该方法与实际输入值一起发布,这将会很有帮助。我注意到在递归方法调用之前有'return',因此它似乎可能从一开始就满足它们的条件(作为一个新问题,我建议)。 – MichaelRushton 2013-03-03 18:11:28
谢谢:)无论如何我会检讨一切(之前问更多的愚蠢) – 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);
}
}
这是回答您的问题吗?
是的,它的确如此。万分感谢! :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块内的逻辑,以确保输入的号码确实是一个整数。
递归调用方法与调用另一个方法没有区别。 – 2013-03-03 17:57:48
'$ this-> method()' – 2013-03-03 18:00:21