【问题标题】:Call a recursive "method of a class" from a different "method of the same class"从不同的“同一类的方法”调用递归的“类的方法”
【发布时间】:2013-02-17 18:52:20
【问题描述】:

我问了this question before,有人放了一个链接来解释我什么是递归函数他/她投了反对票,以此类推,就像在真正的递归函数中,所有其他人也投了我的票。

现在我再次问,我应该如何从不同的“同一类的方法”中调用递归的“类的方法”时间>?在第一个“递归方法”的定义中进行递归时,我应该使用$this->method()还是只使用method()

谢谢 ;) (我称之为类的方法,以避免那些因为说“功能”而被否定杀死的人)

【问题讨论】:

  • 递归调用一个方法与调用另一个方法没有什么不同。

标签: php class function methods


【解决方案1】:

您以与调用任何其他方法相同的方式递归调用一个方法——只是您在其内部调用该方法。

例如,看下面:

class A
{

  public function b($i = 0)
  {

    echo ++$i;

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

  }

}

$a = new A;

$a->b();

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

如果你想更聪明,而不是使用$this-&gt;b($i);,你可以使用$this-&gt;{__FUNCTION__}($i);。然后,如果您希望在某个时候重命名该方法(或将方法内容复制到其他地方),则不必搜索和重命名每个递归调用。

【讨论】:

  • 非常感谢您提供的示例。我的疑问来了,因为我的脚本在调用递归函数时停止了......所以它必须是一个不同的问题;)
  • 如果您将方法与您提供的实际输入值一起发布,将会很有帮助。我注意到在递归方法调用之前有returns,因此似乎从一开始就满足了它们的条件(我建议这是一个新问题)。
  • 谢谢 :) 无论如何我都会回顾一切(在问更多愚蠢之前)
【解决方案2】:
function methodOne(someInteger){    
    return methodTwo(someInteger);    
}

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

这能回答你的问题吗?

【讨论】:

  • 是的,确实如此。万分感谢! :D 非常好。
【解决方案3】:

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

   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 块中,以确保输入的数字确实是整数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2017-10-17
    • 1970-01-01
    • 2016-10-22
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多