问答详情
源自:-

c 语言 函数

# include <stdio.h>

int f(int m)

{

  static int n=1;

  m/=2;

  m=m*2;

  if(m)

  { n*=m;

    return(f(m-2));

  }

  else return(n);

}

void main()

{

  int a,i,j;

  for(i=0;i<2;i++)

  {

    a=f(4+i);

    printf("%d\n",a);

  }

}

(1)程序第一次的输出结果是(   )。

(A) 8         (B) 0 (C) 64 (D) 4

(2)程序第二次的输出结果是(   )。

(A) 8   (B) 0 (C) 64 (D) 4

要具体步奏,,我看不懂这个。。。求解

提问者:惺惺惜 2015-12-06 23:04
微课

个回答

  • RockenRoll
    2015-12-07 11:56:45
    已采纳

    第一次是8,第二次是64;第一次循环m先是等于4然后return(f(m-2));之后m == 2 ;n == 4;再进if(m){ n*=m return(f(m-2));} m == 0;n == 8;再继续这时候m == 0不满足if(m)//这里的意思就是m == 0;所以执行else return(n); 所以返回n == 8;("="赋值运算符,"=="等于)。

    第二次循环也是一样的,只不过这时的 n == 8;m == 4之后运算都和前一个循环一样


  • loser_by
    2015-12-07 11:15:42

    第一次是8,第二次是64.首先,第一次循环m=4 ,然后进入F方法运算此时N的值为4, m=4 然后返回再次执行f方法(但是M变成2),,然后 N * = m=8.然后M-2在此执行F方法(此时M=0)故此执行else下面的语句返回N的值8.第二次循环参考上述。每次循环f递归三次