我有一个函数来查找斐波那契数列中的第n个数,我递归调用该函数。总和存储在一个类变量中,每次调用函数时我都会增加一个额外的指针。这个额外的指针是守门员,它指示何时退出循环的基本情况。使用该算法得到的性能是O(n)线性时间和O(1)空间。我得到了预期的答案,但如果从编码面试的角度来看这是一个可接受的解决方案,我感到很困惑。
var x = 0
var sum = 0
func myFibonacci(of n: Int, a: Int, b:Int) -> Int {
x+=1
if (x == n) {
return sum
} else {
sum = a+b
return myFibonacci(of: n, a: b, b: sum)
}
}
let finalAns = myFibonacci(of: 9, a: 0, b: 1)
print("The nth number in Fibonacci sequence is \(finalAns)")
输出:34
时间复杂度:O(n)线性时间
空间复杂度O(1)
这是编码面试的可接受的解决方案吗?