# 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
要具体步奏,,我看不懂这个。。。求解
第一次是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之后运算都和前一个循环一样
第一次是8,第二次是64.首先,第一次循环m=4 ,然后进入F方法运算此时N的值为4, m=4 然后返回再次执行f方法(但是M变成2),,然后 N * = m=8.然后M-2在此执行F方法(此时M=0)故此执行else下面的语句返回N的值8.第二次循环参考上述。每次循环f递归三次