这个foo函数如何工作?

时间:2017-05-19 19:23:57

标签: c

此C程序将获取存储在变量a中的值并逐个打印。

#include <stdio.h>
void foo(int n, int sum)
{
  int k = 0, j = 0;

  if (n == 0)
    return;

  k = n % 10;
  j = n / 10;

  sum = sum + k;

  foo (j, sum);

  printf ("%d, ", k);
}

int main ()
{
  int a = 2048, sum = 0;
  foo (a, sum);
  printf("\n");
  return 0;
}

输出:

2, 0, 4, 8,

当函数foo执行时:

1)第一次:n = 2048, k = 8 ,j = 204,sum = 8

2)第二次:n = 204, k = 4 ,j = 20,sum = 12

3)第三次:n = 20, k = 0 ,j = 2,sum = 12

4)第四次:n = 2, k = 2 ,j = 0,sum = 14

如果我替换了该行(存在于foo函数中):

printf ("%d, ", k);

用这个:

printf ("%d | %d, ", k, sum);

输出:

2 | 14, 0 | 12, 4 | 12, 8 | 8, 

有人可以解释一下这个程序是如何运作的:

1)它的打印值如何存储在 a

2)按此顺序:2,0,4,8,?

3)当我们打印 k 的值时,为什么 sum 的值会发生变化?

4)当 n 变为0时会发生什么?

1 个答案:

答案 0 :(得分:1)

  1. 您正在foo上调用a函数。
  2. 这是您正在处理剩余号码后打印的订单。尝试在printf中致电foo之前将通话移至foo,看看是否有任何不同。
  3. sum正在发生变化,因为您正在执行sum = sum + k并将其传递给以后的所有电话。
  4. n由于重复分割而最终变为0时,对foo的最后一次调用开始返回并跟随它们之后所有先前的调用都会在打印出使用{提取的数字后开始返回{1}}