📜  门| GATE-CS-2017(Set 2)|问题3(1)

📅  最后修改于: 2023-12-03 14:58:31.858000             🧑  作者: Mango

问题描述

考虑下面的递归过程:

def f(n):
    if (n<=2):
        return n
    else:
        return f(n-1) + f(n-2) + f(n-3)

对于$n=6$,它的输出值是什么?

解法

这是一道比较经典的递归问题,需要我们看出其中的规律,对于大部分程序员来说应该不难:

对于$n \le 2$,返回$n$的值。

对于$n > 2$,返回$f(n-1) + f(n-2) + f(n-3)$的值。

那么当$n=6$时,我们可以这样求解:

$f(6) = f(5) + f(4) + f(3)$

$f(5) = f(4) + f(3) + f(2)$

$f(4) = f(3) + f(2) + f(1)$

$f(3) = f(2) + f(1) + f(0)$

其中$f(0) = 0$,$f(1) = 1$,$f(2) = 2$。

将上述式子带入$f(6)$可以得到:

$f(6) = 11$

因此,当$n=6$时,函数f(n)的输出值应该是11。

代码实现
def f(n):
    if (n<=2):
        return n
    else:
        return f(n-1) + f(n-2) + f(n-3)

print(f(6)) # 11
总结

递归问题需要我们把握好递归的特性,找到规律之后才能正确求解,建议多练习。