为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

正在回答

3 回答

第一次是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之后运算都和前一个循环一样


1 回复 有任何疑惑可以回复我~
#1

惺惺惜 提问者

非常感谢!
2015-12-08 回复 有任何疑惑可以回复我~
#2

loser_by 回复 惺惺惜 提问者

我也是个初学者,希望能多多指教!
2015-12-11 回复 有任何疑惑可以回复我~

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

1 回复 有任何疑惑可以回复我~
#1

loser_by

第二次循环,n的值仍然为8,但是M值由于失帧所以为2
2015-12-07 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926020    人
  • 解答问题       20793    个

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

进入课程

c 语言 函数

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信