3

私は前にこの質問をしました、そして誰かが再帰関数が何であるかを私に説明するためにリンクを置きました。彼/彼女は否定的に投票しました。実際の再帰関数のように、他のすべての人も私を否定的に投票しました。

今、私はもう一度尋ねています、別の「同じクラスのメソッドから再帰的な「クラスのメソッド」をどのように呼び出すべきですか?最初の「再帰的方法」の定義で再帰を実行している間、私は使用する必要がありますか、それとも単に$this->method()method()

ありがとう;)(「機能」と言ってネガティブに殺す人を避けるためにクラスのメソッドと呼んでいます)

4

3 に答える 3

7

他のメソッドを呼び出すのと同じ方法でメソッドを再帰的に呼び出します。つまり、メソッド自体の中でメソッドを呼び出しているだけです。

たとえば、次を見てください。

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-03T18:00:33.497 に答える
2
function methodOne(someInteger){    
    return methodTwo(someInteger);    
}

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

これはあなたの質問に答えますか?

于 2013-03-03T18:01:19.307 に答える
0

私の答えは間違いなく2年遅れて来るでしょう!これが他の誰かに役立つことを願っています。これが私の解決策です:

   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();

入力した数値が実際に整数であることを確認するために、ロジックをtrycatchブロック内にラップすることができます。

于 2015-11-07T07:45:40.267 に答える