c++求编程n的阶乘

#include<iostream.h>
long factorial(int n);
void mail()
{
cout<<factorial(4)<<endl;
}
long factorial(int n)
{
long result=0;
if(n==0)
result=1;
else
result=n*factorial(n-1);
return result;
}
请问这段程序里,为什么要有long result=0:这句呢?不设置可以吗?再说result怎么会是0呢?

首先,是main,不是mail。

其次,本程序中是使用的是递归函数来实现n的阶乘,因为在具体的计算机上实现的时候,递归是由栈(一种数据的组织形式)来实现的,而栈的大小是受限于计算机的可用空间的。所以,在计算n的阶乘时,当n较大,在计算时可能会出现空间不足不能进行计算的情况,这种情况下,会返回result的值为0.提醒程序的使用者,本次计算结果不对,请检查程序或者输入数据。

最后,如果上面这段看不懂也没有关系,你可以输入一个足够大的数来测试一下,当result初值是否为0对程序有什么影响。只有你自己试了,才能真正的掌握它。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-01-19
#include<iostream.h>
long factorial(int n);
void main()
{
cout<<factorial(4)<<endl;
}
long factorial(int n)
{
if(n==0){
return 1;
}
else{
return n*factorial(n-1);
}
}

----------------------------------------------------
可以不用result 浪费局部变量 浪费局部变量在寄存器的资源
result=0;是为了初始化局部变量 如果不初始化 result 则会是一个随机值!其实初始化了result也没什麽用 可以不用初始化result 其实编者只是出于一种习惯而已.

希望您喜欢我的回答.
第2个回答  2010-01-19
使用long int类型是为了保证不会出现越界的错误,初始化为零是因为每次调用factoria()函数时都会返回一个result值,所以必须对其进行初始化操作,否则再次调用时不能保证其值仍为0,避免了计算的隐患。
0只是对其初始化的值,原则上可以把其初始化为任何long int类型的数值。
第3个回答  2010-01-19
long result=0
这是定义变量后进行初始化。
不设置的话,在这里也行。
但最好养成好习惯,编程的时候,定义一个变量后要初始化
第4个回答  2010-01-19
可以不初始化,这个函数中,result初始化与否对最终的结果无影响.
相似回答