我問了this question before,有人給我解釋了一個鏈接什麼是遞歸函數是。 他/她投票否定等,如在真實遞歸函數,所有其他人投我負。從不同的「同一類的方法」中調用遞歸「類的方法」
現在我再次問,我應該怎麼稱呼遞歸「一類的方法」從不同「同一個類的方法」?雖然這樣做遞歸在第一個「遞歸方法」的定義,我應該用$this->method()
或只是method()
感謝;)(我把它叫做一個類的方法,以避免那些誰與底片殺說「功能」 )
我問了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