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
}
所以我在 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
}