[C] 纯文本查看 复制代码
思路,递归进行时暗含了循环,循环条件是 if (x == 0)并返回1作为结束。
这个1返回去,就是当前循环的结果。
当4进入时
long factorial(long 4)
{
if (x == 0) return 1; //结束递归
else return 4*factorial(4 - 1) ;
}
得到:factorial(3)
long factorial(long 3)
{
if (x == 0) return 1; //结束递归
else return3*factorial(3 - 1) ;
}
得到:factorial(2)
long factorial(long 2)
{
if (x == 0) return 1; //结束递归
else return 2*factorial(2 - 1) ;
}
得到:factorial(1)
long factorial(long 1)
{
if (x == 0) return 1; //结束递归
else return 1*factorial(1 - 1) ;
}
得到:factorial(0)
long factorial(long 0)
{
if (x == 0) return 1; //结束递归
else return 1*factorial(1 - 1) ;
}
从后面看起,
long factorial(long 0)结果是 1;
long factorial(long 1)结果是 :1*factorial(1 - 1) = 1*1 ;
long factorial(long 2) )结果是 :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!
)
说到这里。应该想的出来了,代码不写了。
|