首页 > 试题广场 >

程序运行结果为:

[问答题]
#include <stdio.h>
main()
{  int  i,a;int fun(int m);
   for(i=0;i<2;i++)
   {  a=fun(4+i);printf("%d\n",a);  }
}
int fun(int m)
{ static int n=0;
  m/=2;m=m*2;
  if(m)
  { n=n*m; return (fun(m-2));}
  else  return(n++);
}

程序运行结果为:


0
8

递归内部运算不赘述,第一次递归至m=0执行return(n++)时,n此时为0,n++先执行外部操作之后才自加,即接收变量a=0。执行return语句之后n=1,并且因其为静态局部变量,故在程序结束前不进行释放。printf语句打印出a的值“0”;

下一轮for循环,要注意本轮for循环中第一次调用fun函数时n的值为未释放的1,递归分步骤如下:
m=5/2=2;//因m为int型,/运算舍弃小数位只留整数商
m=2*2=4;
m非0,n=1*4=4;
进入下一轮递归fun(4-2):
m=2/2=1;
m=1*2=2;
m非0,n=4*2=8;
进入下一轮递归fun(2-2):
m=0/2=0;
m=0*2=0;
m为0,返回最终的递归结果n此时为8;
即接收变量a=8,printf语句打印出a的值“8”。
发表于 2020-07-13 01:56:43 回复(0)
0 8,运行的,有大佬解释一下08是如何得来的吗
发表于 2020-07-09 16:44:58 回复(2)