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);
}
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);
}
----------------------------------------------------
递归调用会在栈上分配空间,每递归一次就分配一定空间,如果递归深度足够大,肯定会造成栈溢出。而循环就不会涉及到栈的操做,从效率和空间上考虑推荐使用循环。
- 2 回答
- 0 关注
- 887 浏览
添加回答
举报