📜  门| GATE CS 2011 |问题8(1)

📅  最后修改于: 2023-12-03 15:12:36.062000             🧑  作者: Mango

门 | GATE CS 2011 | 问题8

本题是GATE CS 2011的第8题,主要考察了程序员对于数据结构和算法的理解与应用。题目如下:

给定下面的公式:

F(n) = (n > 100) ? n-10 : F( F(n+11) )

问题:当 F(87) 被调用时,会输出什么?

题解

这个问题其实就是一个递归函数的问题。这个函数的定义如下:

def F(n):
    if n > 100:
        return n - 10
    else:
        return F( F(n + 11) )

n > 100 时,直接返回 n - 10。否则,再次调用 F(n+11),并将其返回值作为函数参数再次调用 F(),直到 n > 100

所以,当 F(87) 被调用时,会依次发生以下的递归调用:

F(87) -> F(F(98)) -> F(F(F(109))) -> F(F(99)) -> F(F(F(110))) -> F(F(100)) -> F(91) -> F(F(102)) -> F(F(F(113))) -> F(F(103)) -> F(F(F(114))) -> F(F(104)) -> F(95) -> F(F(106)) -> F(F(F(117))) -> F(F(107)) -> F(F(F(118))) -> F(F(108)) -> 98

也就是说,F(87) 的返回值为 98

结论

F(87) 被调用时,会输出 98

参考