2013-03-03 213 views
2

我問了this question before,有人給我解釋了一個鏈接什麼是遞歸函數是他/她投票否定等,如在真實遞歸函數,所有其他人投我負。從不同的「同一類的方法」中調用遞歸「類的方法」

現在我再次問,我應該怎麼稱呼遞歸「一類的方法」從不同「同一個類的方法」?雖然這樣做遞歸在第一個「遞歸方法」的定義,我應該用$this->method()或只是method()

感謝;)(我把它叫做一個類的方法,以避免那些誰與底片殺說「功能」 )

+3

遞歸調用方法與調用另一個方法沒有區別。 – 2013-03-03 17:57:48

+1

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

回答

5

你可以像調用任何其他方法一樣遞歸地調用一個方法 - 它只是在你自己內部調用方法。

例如,看看下面:

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

2
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

0

我的答案肯定是在兩年後!我只希望這對其他人有用。這裏是我的解決方案:

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塊內的邏輯,以確保輸入的號碼確實是一個整數。

相關問題