#include<iostream>
using namespace std;
int factorial(int x)
{
if(x == 1)
{
return 1;
}
else
{
return x*factorial(x-1);
}
}
int main()
{
cout<<factorial(5)<<endl;
}
当值达到1时,我没有得到部分。为什么程序不打印1作为输出,因为当到达1时,它返回1。考虑以下步骤:
5*factorial(4)=5*4*factorial(3)=5*4*3*factorial(2)=5*4*3*2*factorial(1)
那么现在,当x
值变为1并进入if时,条件变为真并返回1。那么为什么它不输出1呢?是5*4*3*2*factorial(1)
的值存储在某个地方,返回值只是与5*4*3*2*1
相乘并输出120?
还请解释一下,当我们传递0而不是5时会发生什么,它将如何输出1?(0 ! = 1)
就像你说的:
5*factorial(4)=5*4*factorial(3)=5*4*3*factorial(2)=5*4*3*2*factorial(1)
如果它达到1那么这个就会被
取代5*factorial(4)=5*4*factorial(3)=5*4*3*factorial(2)=5*4*3*2*1
所以最后一步的结果进入最后第二步....其中2*1将被计算…之后,最后第三步获得2*1 = 2的值,并将3乘以in,以此类推。
如果你在你的函数中插入更小或更大的0,你将得到一个无限的递归,因为If(0 == 1)。
int factorial(int x)
{
if(x <= 1)
{
return 1;
}
else
{
return x*factorial(x-1);
}
}
0和-number也可以
堆栈在某种意义上存储了所有挂起的操作。只要fact(2)从调用中获得1,它就将其乘以2并返回2。事实(3)接收到2,将其乘以3并返回6。事实(4)接收到6,将其乘以4并返回24。等等…
传递0在程序的当前形式中是没有考虑到的,并且实际上会导致程序崩溃(很有可能)。将if(x==1)行改为if(x==0)将解决此问题。