📜  门| GATE CS 2018 |问题 16(1)

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

GATE CS 2018 | 问题 16

这是关于GATE CS 2018考试的问题16。这道题目需要解决一个类型检查问题,并给出类型推断的结果。

给定以下的程序代码

def f(n):
    if n % 2 == 0:
        return n/2
    else:
        return 3*n + 1

def g(n):
    if n == 1:
        return True
    elif n == 4:
        return False
    else:
        return g(f(n))

print(g(27))

接下来的问题是:当代码片段被执行时,g(27)返回什么?对此,我们需要首先进行类型检查和类型推断。

从第一行开始,我们可以看到f函数的参数n是一个整数。接下来有一个条件语句,根据条件返回一个整数值或一个布尔值。因此,f函数的返回类型应该是Int或Bool。

g函数也有类似的结构。它的参数n是整数类型,函数体里有条件语句和递归调用。也可以看到g函数的返回类型应该是Bool类型。

最后,我们可以看到调用了g(27)。由于27在代码执行时不等于1或4,这将导致g函数陷入无限递归,永远不会返回一个值。

因此,g(27)的答案是:程序在执行g(27)时将会陷入无限递归循环,并最终导致stackoverflow错误。

以上就是关于GATE CS 2018问题16的解释。通过类型检查和类型推断,我们可以更好地理解程序,识别其可能出现的问题,找到最终结果并排除错误。