class ViewController: UIViewController {
func raise(base: Int, exp: Int) -> Int {
if (exp == 0) {
return 1
}
else {
return base * raise(base, exp: exp - 1)
}
}
var check = raise(2, exp: 4) // error here
print(check)
}
我对编码和学习递归非常陌生。我只是想调用函数raise
来看看它是如何工作的,但是我得到了这个错误:
调用
中的额外参数
有人能告诉我为什么我得到这个错误吗?谢谢你。
问题是var check = raise(2, exp: 4)
是在您的类的根级别,您不能这样做。您必须将此调用放在函数中或类之外。这里我们从viewDidLoad
内部调用:
class ViewController: UIViewController {
func raise(base: Int, exp: Int) -> Int {
if (exp == 0) {
return 1
}
else {
return base * raise(base, exp: exp - 1)
}
}
override func viewDidLoad() {
super.viewDidLoad()
var check = raise(2, exp: 4)
print(check)
}
}
在Swift 1中,如果在函数签名中没有标记#
,你就不会让指定第二个参数的名称,函数和方法之间是有区别的。在Swift 2中,这种情况不再存在了。
不能在类的实现内部调用function。如果你尝试像这样改变你的代码,它将工作得很好(作为递归)
class ViewController: UIViewController {
func raise(base: Int, exp: Int) -> Int {
if (exp == 0) {
let check = raise(2, exp: 4) // no error here
print(check)
return 1
} else {
let check = raise(2, exp: 4) // no error here
print(check)
return base * raise(base, exp: exp - 1)
}
}
}
并且确保在返回任何内容之前编写代码,否则它将无法运行。