📜  门| GATE-CS-2016(Set 2)|第47章

📅  最后修改于: 2021-07-02 16:33:03             🧑  作者: 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的最大值。该程序打印的值是

(A) 2
(B) 3
(C) 4
(D) 5答案: (B)
解释:
在下图中查看给定代码的递归堆栈。假设数组的基地址从1000开始,一个整数需要4个字节。
pranjul_16

pranjul_16_1

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

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