2012-05-26 73 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的括号解释为分组,而不是方法调用语法的一部分。