各位咱们讨论一下递归吧!
#include"stdio.h"#include"iostream"
using namespace std;
#definen 4
long factorial(longx)
{
if (x == 0) return 1; //结束递归
else return x*factorial(x - 1) ;
}
int main()
{
long a;
a=factorial(n);
cout << n<<"的阶乘为"<<a<<endl;
}
/*
int _tmain(int argc, _TCHAR* argv[])
{
int sum2 = 0;
for (int i = 1; i <=n; i++)
{
int sum = 1;
for (int j = 1; j <= i; j++)
{
sum = sum*j;
}
sum2 = sum2 + sum;
}
cout << sum2<<endl;
return 0;
}
*/上面是求n!;
下面是求 1!+2!+3!....+n!
可不可以把下面的利用递归实现啊 求指教。 表示看不懂!!!!! 口以的,但是目测n大的话会很卡,能不用递归就不用递归,速度很慢的,除非你没其他思路了
RE: 各位咱们讨论一下递归吧!
本帖最后由 ttl255 于 2016-11-6 22:30 编辑作业题?
为啥都用C++了 还用C的代码风格
我就过来划水的
笑笑就好
#include <iostream>
int factorial(int n);
int main()
{
int n, sum = 0;
while ( std::cin >> n)
{
for (int i = 1; i <= n; i++)
{
sum += factorial(i);
}
std::cout << sum <<std::endl;
}
return 0;
}
int factorial(int n)
{
if (n > 1)
{
return n * factorial(n - 1);
}
else
{
return n;
}
}
思路,递归进行时暗含了循环,循环条件是 if (x == 0)并返回1作为结束。
这个1返回去,就是当前循环的结果。
当4进入时
long factorial(long4)
{
if (x == 0) return 1; //结束递归
else return 4*factorial(4 - 1) ;
}
得到:factorial(3)
long factorial(long3)
{
if (x == 0) return 1; //结束递归
else return3*factorial(3 - 1) ;
}
得到:factorial(2)
long factorial(long2)
{
if (x == 0) return 1; //结束递归
else return 2*factorial(2 - 1) ;
}
得到:factorial(1)
long factorial(long1)
{
if (x == 0) return 1; //结束递归
else return 1*factorial(1 - 1) ;
}
得到:factorial(0)
long factorial(long0)
{
if (x == 0) return 1; //结束递归
else return 1*factorial(1 - 1) ;
}
从后面看起,
long factorial(long0)结果是 1;
long factorial(long1)结果是 :1*factorial(1 - 1)= 1*1 ;
long factorial(long2) )结果是 :2*factorial(2 - 1) = 2*1 ;
….
….
int _tmain(int argc, _TCHAR* argv[])
{
int sum2 = 0;
for (int i = 1; i <=4; i++)
{
int sum = 1;
for (int j = 1; j <= i; j++)
{
sum = sum*j;
}
sum2 = sum2 + sum;
}
cout << sum2<<endl;
return 0;
}
可以不用按他的模板做。
1!+2!+3!....+n!可以设置n每次 n-- 依次减一;
使用递归(按上面的递归方式,)
直到n = 1时。返回1
返回去的1+前面的2 (return 1*factorial(1 - 1)改return 1 +factorial(*)) ;
这样就实现n!
)
说到这里。应该想的出来了,代码不写了。
页:
[1]