注册 登录
编程论坛 C++教室

c++程序题相关问题

wluhao 发布于 2012-10-10 19:06, 366 次点击
#include<iostream>
using namespace std;
int main()
{
    int fac(int);
    int i,n=5,y;
    for(i=1;i<=5;i++)
   
    {  y=fac(i);
    cout<<y<<endl;}
    return 0;
}
int fac(int i)
{static int y=1;
  y=y*i;
  return y;
}
为啥把cout<<y<<endl改为cout<<fac(i)<<endl结果变为1,4,36,576,14400,寻求高手解答

[ 本帖最后由 wluhao 于 2012-10-10 19:13 编辑 ]
4 回复
#2
风之子MIKEY2012-10-10 20:47
i=1:y_static=y_static(1)*i//////////y=fac(i);
             =1;
      y_for=y_static=1;    ///////////return y
     y_static=y_static(1)*i//////////cout<<fac(i);
      fac(i) =y_static=1;  ////////return y
    out:1
i=2: y_static=y_static(1)*i//////////y=fac(i);
             =2
     y_for=y_static=2;///////////return y
    ystatic=y_static(2)*i//////////cout<<fac(i);
          =4;
    fac(i)=y_static=4;/////////return y
    out:4
      
i=3: y_static=y_static(4)*i//////////y=fac(i);
             =12
     y_for=y_static=12;//////////////return y;
    y_static=y_static(12)*i;////////////////////cout<<fac(i);
            =36;
      fac(i)=y_static=36;///////////return y;
    out:36
 i=4:  y_static=y_static(36)*i;//////////y=fac(i);
               =144;
      y_for=y_static=144;///////////return y;
    y_static=y_static(144)*i//////////cout<<fac(i);
            =576;
   fac(i)=y_static=576;/////////return y;
       out:576
     
i=5: y_static=y_static(576)*i///////y=fac(i);
            =2880
     y_for=y_static=2880;//////////return y;
     y_static=y_static(2880)*i///////////////////cout<<fac(i);
            =14400
    fac(i)=y_static=14400;//////////return y;
     out:14400
   其中y_for指 for 内的临时变量y;y_static指fac函数中的静态变量y;括号里的数字指变量当时的值;out指输出的数。
#3
oncoldrain2012-10-11 00:34
那是因为 你一个for 循环 运行了两次fac(i);  
y=fac(i); 这里一次
cout<<fac(i)<<endl 这里又一次

你把前面那个y=fac(i);注释掉就正常了
#4
wluhao2012-10-11 13:22
回复 2楼 风之子MIKEY
谢谢
#5
wluhao2012-10-11 13:28
回复 3楼 oncoldrain
多谢
1