Swift has error : "thread return -x" to return to the state before expression evaluation"

Swift has error : "thread return -x" to return to the state before expression evaluation"

所以我在 xcode playground 中有代码并得到了错误 error in code

这是我做的练习 Return 阶乘 创建一个接受整数和 returns 该整数的阶乘的函数。即整数乘以所有正的低位整数。

这是我的代码

func factorial(_ num: Int) -> Int {
    var result :Int = 0
    for _ in num...1 {
        result = num * (num - 1)
    }
    return result
}

print(factorial(12)) //这一行有错误

但在终端中得到了这个输出:

答案在错误消息中 - 范围的上限必须大于或等于下限。

因此您需要以不同的方式重写该方法。你的代码也有一个根本性的缺陷——你的数学逻辑是错误的——结果每次都会被覆盖,而不是累加总数。对问题采用类似的方法你可以这样做:

func factorial(_ num: Int) -> Int {
  var result :Int = 1

  guard num > 0 else {return result}. //0! is 1 not 0
  var num = num
  while num > 0 {
    result *= num
    num -= 1
  }
  return result
}

有一种使用递归执行此操作的更优雅的方法,它避免了丑陋的 var num=num

func fac2(_ num: Int, total: Int = 1) -> Int {
  return num > 0 ? fac2(num-1, total: total * num) : total
}