该程序会针对每个整数终止吗?

该程序会针对每个整数终止吗?

在 GATE 准备的部分测试中,有一个问题:

f(n):
     if n is even: f(n) = n/2
     else f(n) = f(f(n-1))

我回答说“它将终止于所有整数”,因为即使对于负整数,它也会终止于堆栈溢出错误

但是我的朋友不同意,他说因为这不是实现的代码而只是伪代码,所以如果是负整数,它将是无限递归。

编辑:代码中有一个小问题。

哪一个答案是正确的?为什么?

答案1

此伪代码和最初给出的一样 将要对所有整数终止。如果给定一个奇数,它将从中减去一,并对改变的值进行递归;对于偶数,它将除以 2但不是递归由于函数在最初输入奇数时以偶数作为参数进行递归,因此它最多只会递归一次,然后返回。

(注意:发布时最初给出的代码为,其中 x 为奇数,f(x)=f(x-1)。)

修订后,将终止所有非负整数。然而,它将不是对所有负整数终止;特别地,f(-1)是一种非终止调用。

相关内容