📜  门| GATE-CS-2016(套装2)|第 47 题

📅  最后修改于: 2021-09-26 04:31:49             🧑  作者: Mango

考虑以下程序:

int f(int *p, int n)
{
    if (n <= 1) return 0;
    else return max(f(p+1,n-1),p[0]-p[1]);
}
int main()
{
    int a[] = {3,5,2,6,4};
    printf("%d", f(a,5));
}

注意:max(x,y) 返回 x 和 y 的最大值。这个程序打印的值是

(一) 2
(乙) 3
(三) 4
(四) 5答案:(乙)
解释:
查看下图中给定代码的递归堆栈。假设数组的基地址从 1000 开始,一个整数占用 4 个字节。
pranjul_16

pranjul_16_1

在最后一次递归调用 f(1016,1) 返回之后,在之前的调用中,我们将返回 max(0,2) 然后返回 max(2,-4) 然后返回 max(2,3) 最后返回最大(3,-2)= 3。

此解决方案由Pranjul Ahuja 提供
这个问题的测验