c++程序看不懂啊

来源:百度知道 编辑:UC知道 时间:2024/09/28 09:35:53
//examplech308.cpp
#include<iostream.h>
long fact(int m)
{
long n;//long和int有什么区别?
if(m<0)cout<<"m<0,data errort!"<<endl;
else if(m==0||m==1)n=1;
else n=fact(m-1)*m;
return(n);//返回n有什么用?这个程序是怎么达到计算m!的?
}

void main()
{
int m;
long y;
cout<<"enter a positive integer:";
cin>>m;
y=fact(m);
cout<<m<<"!="<<y<<endl;
}

long 和 int 的区别:
int 和 long 在c++中都是4个字节,但是long在一般情况下,都是用int,如果你把他改成int运行结果也是一样的。
返回 n 的作用:
if(m<0)cout<<"m<0,data errort!"<<endl;
else if(m==0||m==1)n=1;
else n=fact(m-1)*m;
return(n);
看上面的程序:首先如果 m<0 输出的是 m<0,data errort!也就是返回给主函数的值。再则就是如果上述的条件不满足 执行 if(m==0||m==1)n=1; return 的值就是 1,下面的就不执行下去了。同理可得,上述的两个条件都没有满足的话就执行 n=fact(m-1)*m; 递归形式,在主函数中通过 y=fact(m); 调用上面的函数来执行。这个程序执行的结果是:
enter a positive integer: 5
5!=120
他是这样执行的,
n=fact(m-1)*5;
n=fact(m-2)*4*5;
..........
n=1*2*3*4*5;
通过这个返回结果为 120。

n=fact(m-1)*m

递归的结果最终不是赋值给n吗
然后函数返回值不就是要的阶乘吗

int整型,占两个字节。long长整型,占四个字节。一个字节是八位二进制数。
n是函数返回值。因为这个函数必须有一个返回值。即n=fact(m),当然这里m和n都是形参。比如主函数中这样的语句y=fact(4),4给m,y=n=fact(4)。时间仓促,说不完了。