Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我想知道为什么第一种阶乘方法在 ruby 中不起作用(无限循环),而第二种方法起作用。
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
区别在于方法名称后面的空格,而不是您构建 if-else 的方式。
fac (x-1) * x被解析为fac((x-1) * x)。基本上,如果方法名称后跟一个空格(或任何不是左括号的标记),ruby 假定您正在调用不带括号的方法。因此它将括号解释x-1为分组,而不是方法调用语法的一部分。
fac (x-1) * x
fac((x-1) * x)
x-1