为了账号安全,请及时绑定邮箱和手机立即绑定

C++ 求 n!

C++ 求 n!

C++
12345678_0001 2018-07-29 21:21:22
C++算n!用归递的算法好呢还是用循环的算法有什么区别啊最好有代码...
查看完整描述

2 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

简单的说:用循环语句代码要多写两行,
用递归的话代码很少但很运行时很费时间。
用循环语句写:
int sum=0;
for(int i=1;i<n;i++)
{sum *=i;}
用递归的话就是:
int f(int n )
{if (n==0) return 1;
else return n*f(n-1);
}

查看完整回答
反对 回复 2018-08-02
?
动漫人物

TA贡献1815条经验 获得超10个赞

dayuch2003的代码问题:
1.在n比较小时可以,但是当n=800时,就会栈溢出,导致程序出错。
2.对于输入的0,返回错误的结果。
下面的代码对这个进行了改进。

#include <iostream>
using namespace std;

int fun(int a,double sum);
int main()
{
int x;

cout<<"请输入一个整数:";
cin>>x;
cout<<"n!=";
if(x==0) //如果输入为0,直接返回结果
cout<<0<<endl;
else
cout<<fun(x,1)<<endl;

system("pause");
return 0;
}
int fun(int a,double sum)
{
if(a<1)
return sum;
else
return fun(a-1,sum*a);
}

----------------------------------------------------
递归调用会在栈上分配空间,每递归一次就分配一定空间,如果递归深度足够大,肯定会造成栈溢出。而循环就不会涉及到栈的操做,从效率和空间上考虑推荐使用循环。

查看完整回答
反对 回复 2018-08-02
  • 2 回答
  • 0 关注
  • 887 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信