c 语言 函数

来源:-

惺惺惜

2015-12-06 23:04

# 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

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

写回答 关注

2回答

  • 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_... 回复惺惺惜

    我也是个初学者,希望能多多指教!

    2015-12-11 20:34:53

    共 2 条回复 >

  • 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递归三次

    loser_...

    第二次循环,n的值仍然为8,但是M值由于失帧所以为2

    2015-12-07 11:21:44

    共 1 条回复 >

C语言入门

C语言入门视频教程,带你进入编程世界的必修课-C语言

926207 学习 · 20797 问题

查看课程

相似问题