c++求编程n的阶乘

#include<iostream.h>longfactorial(intn);voidmail(){cout<<factorial(4)<<endl;}longfact... #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呢?
展开
 我来答
knife12
推荐于2017-09-04 · TA获得超过347个赞
知道小有建树答主
回答量:314
采纳率:0%
帮助的人:336万
展开全部
首先,是main,不是mail。

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

最后,如果上面这段看不懂也没有关系,你可以输入一个足够大的数来测试一下,当result初值是否为0对程序有什么影响。只有你自己试了,才能真正的掌握它。
陈暴龍
2010-01-19 · TA获得超过406个赞
知道小有建树答主
回答量:175
采纳率:0%
帮助的人:181万
展开全部
#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 其实编者只是出于一种习惯而已.

希望您喜欢我的回答.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
in奋斗
2010-01-19 · TA获得超过103个赞
知道小有建树答主
回答量:120
采纳率:0%
帮助的人:112万
展开全部
使用long int类型是为了保证不会出现越界的错误,初始化为零是因为每次调用factoria()函数时都会返回一个result值,所以必须对其进行初始化操作,否则再次调用时不能保证其值仍为0,避免了计算的隐患。
0只是对其初始化的值,原则上可以把其初始化为任何long int类型的数值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
马洋人
2010-01-19 · 超过46用户采纳过TA的回答
知道小有建树答主
回答量:160
采纳率:0%
帮助的人:97.6万
展开全部
long result=0
这是定义变量后进行初始化。
不设置的话,在这里也行。
但最好养成好习惯,编程的时候,定义一个变量后要初始化
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-01-19
展开全部
可以不初始化,这个函数中,result初始化与否对最终的结果无影响.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式