2012-05-26 75 views
6

我想知道爲什麼第一種方法的階乘在紅寶石中不起作用(無限循環),而第二種方法卻行不通。紅寶石遞歸問題

def fac (x) 
    if x == 0 
    return 1 
    else 
    return (fac (x-1) * x) 
    end 
end 

def fact(num) 
    return 1 if num == 0 

    fact(num - 1) * num 
end 

回答

7

不同之處在於方法名稱後面的空格,而不是您構造if-else的方式。

fac (x-1) * x被解析爲fac((x-1) * x)。基本上,如果一個方法名後面跟着一個空格(或者任何不是左括號的標記),ruby會假設你沒有括號調用該方法。因此它將圍繞x-1的括號解釋爲分組,而不是方法調用語法的一部分。