#include
int f(int *a, int n)
{
if(n <= 0) return 0;
else if(*a % 2 == 0) return *a + f(a+1, n-1);
else return *a - f(a+1, n-1);
}
int main()
{
int a[] = {12, 7, 13, 4, 11, 6};
printf("%d", f(a, 6));
getchar();
return 0;
}
(A) -9
(B) 5
(C) 15
(D) 19答案: (C)
说明: f()是一个递归函数,如果* a是偶数,它将f(a + 1,n-1)加到* a上。如果* a是奇数,则f()从* a中减去f(a + 1,n-1)。有关f(a,6)的执行,请参见下面的递归树。
。
f(add(12), 6) /*Since 12 is first element. a contains address of 12 */
|
|
12 + f(add(7), 5) /* Since 7 is the next element, a+1 contains address of 7 */
|
|
7 - f(add(13), 4)
|
|
13 - f(add(4), 3)
|
|
4 + f(add(11), 2)
|
|
11 - f(add(6), 1)
|
|
6 + 0
因此,最终返回的值是12 +(7 –(13 –(4 +(11 –(6 + 0)))))= 15
这个问题的测验