计算斐波那契(7)时有多少次斐波那契(2)调用?

时间:2014-02-27 22:46:05

标签: algorithm recursion fibonacci

当您运行Fib(7)时,对Fib(2)进行了多少次调用?

算法的定义如下:

Algorithm Fib(n):

    if n = 0 or n = 1
        then f = n
        else f = Fib(n-1) + Fib(n - 2)
    endif
    return f

我认为答案是7。

3 个答案:

答案 0 :(得分:2)

这是Python中伪代码的实现(几乎是复制粘贴):

def Fib(n):
    if n == 0 or n == 1:
        f = n
    else:
        f = Fib(n-1) + Fib(n - 2)
    return f

print Fib(7)

现在,我添加以下几行:

if n == 2:
    print 'Fib(2)'

结果是:

Fib(2)
Fib(2)
Fib(2)
Fib(2)
Fib(2)
Fib(2)
Fib(2)
Fib(2)
13

这意味着Fib(2)被称为 8次

答案 1 :(得分:2)

设f(n)是计算Fib(n)时对Fib(2)的调用次数。

然后,f(2)= 1,f(3)= 1,并且对于k> 1。 3,f(k)= f(k-1)+ f(k-2)。

这与Fib本身具有相同的递归关系,你得到解f(k)= Fib(k-1)。对于特定情况k = 7,您得到解Fib(6)= 8。

这说明:计算Fib(n)时对Fib(m)的调用次数为Fib(n-m + 1)(假设n> = m)。

答案 2 :(得分:1)

为了它的乐趣,在Python中:

def fib(n):
    def fib2(n):
        count[n] = count.get(n,0)+1
        if n < 2:
            return n
        else:
            return fib2(n-1) + fib2(n-2)
    count = {}
    return fib2(n), [(c, count[c]) for c in sorted(count)]

print(fib(7))

打印

=> (13, [(0, 8), (1, 13), (2, 8), (3, 5), (4, 3), (5, 2), (6, 1), (7, 1)])
    ===                   ======

所以fib(7)的结果是 13 ,而fib(2)被称为 8 次。