我想知道为什么第一种阶乘方法在红宝石中不起作用(无限循环)而第二种方法起作用.
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
Run Code Online (Sandbox Code Playgroud)
不同之处在于方法名称之后的空格,而不是您构造if-else的方式.
fac (x-1) * x被解析为fac((x-1) * x).基本上,如果方法名称后跟一个空格(或任何不是左括号的标记),ruby假定您在没有括号的情况下调用该方法.因此它将括号解释x-1为分组,而不是方法调用语法的一部分.