📜  门|门CS 2010 |第 35 题

📅  最后修改于: 2021-09-24 06:02:37             🧑  作者: Mango

#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;
}

(一) -9
(乙) 5
(三) 15
(四) 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
这个问题的测验