在计算 c 中的阶乘时,为什么操作不继续进一步达到负值?
while calculating factorial in c why doesn't operation keep continuing further to negative values?
我正在编写一个用于查找阶乘的递归程序,一旦 x 达到零,为什么操作会在被调用函数中停止,而不是继续进一步处理负值,例如 -1、-2、-3 等等,如 int也采用负值并继续操作,因为它是我自己的用户定义函数。
#include<stdio.h>
int factorial( int x);
int main() {
int n;
scanf("%d",&n);
n=factorial(n);
printf("%d",n);
return 0;
}
int factorial(int x){
int f;
if(x==0||x==1){
return 1;
}
else{
f= x*factorial(x-1);
return f;}
}
当使用参数值 2 调用 factorial
时,它会计算 if
语句中的 x==0||x==1
。此条件为假,因此 if
中的“then”子句不执行,程序控制流向 else
.
else
执行f = x*factorial(x-1)
,其中x
为2,factorial(x-1)
为factorial(1)
。
因此我们递归调用了参数值为 1 的 factorial
。它在 if
语句中计算 x==0||x==1
。此条件为真,则执行“then”子句。
then子句是return 1;
,所以函数returns1,程序控制权returns交给调用者
在调用者中,我们还在求值x*factorial(x-1)
。 factorial(x-1)
返回了 1,所以我们有 2*1
。所以 f
设置为 2.
下一条语句是return f;
。所以2返回给调用者,程序控制returns给调用者,也就是main
。程序继续执行 main
.
程序不会继续到负值,因为没有调用 factorial
具有负值。
我正在编写一个用于查找阶乘的递归程序,一旦 x 达到零,为什么操作会在被调用函数中停止,而不是继续进一步处理负值,例如 -1、-2、-3 等等,如 int也采用负值并继续操作,因为它是我自己的用户定义函数。
#include<stdio.h>
int factorial( int x);
int main() {
int n;
scanf("%d",&n);
n=factorial(n);
printf("%d",n);
return 0;
}
int factorial(int x){
int f;
if(x==0||x==1){
return 1;
}
else{
f= x*factorial(x-1);
return f;}
}
当使用参数值 2 调用 factorial
时,它会计算 if
语句中的 x==0||x==1
。此条件为假,因此 if
中的“then”子句不执行,程序控制流向 else
.
else
执行f = x*factorial(x-1)
,其中x
为2,factorial(x-1)
为factorial(1)
。
因此我们递归调用了参数值为 1 的 factorial
。它在 if
语句中计算 x==0||x==1
。此条件为真,则执行“then”子句。
then子句是return 1;
,所以函数returns1,程序控制权returns交给调用者
在调用者中,我们还在求值x*factorial(x-1)
。 factorial(x-1)
返回了 1,所以我们有 2*1
。所以 f
设置为 2.
下一条语句是return f;
。所以2返回给调用者,程序控制returns给调用者,也就是main
。程序继续执行 main
.
程序不会继续到负值,因为没有调用 factorial
具有负值。