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
来看看它是如何工作的,但是我得到了这个错误:
呼叫中的额外参数
有人能告诉我为什么会收到此错误吗?谢谢。
答案 0 :(得分:0)
问题是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不再是这种情况了。
答案 1 :(得分:0)
你不能在类的实现中调用函数。如果你试图像这样改变你的代码它会很好地工作(作为递归)
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)
}
}
}
确保在返回任何内容之前编写代码,否则它将无法运行。