Ruby递归问题

6

我想知道为什么在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
1个回答

7

区别在于方法名称后面的空格,而不是你构造 if-else 的方式。

fac (x-1) * x 被解析为 fac((x-1) * x)。基本上,如果一个方法名称后跟一个空格(或任何不是左括号的标记),Ruby 就会认为您没有使用括号调用该方法。因此,它将围绕 x-1 的括号解释为分组,而不是方法调用语法的一部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接