C-带有参考功能调用的阶乘递归



我想使用参考方法来创建一个递归阶乘。

int recursiveFactorialByValue(int x){
if (x==0||x==1) return 1;
else if (x<=0) return -1;
else return x * recursiveFactorialByValue(x-1);
}
void recursiveFactorialByReference(int *x){
int minusOne = *x - 1;
int *ptr = &minusOne;
if (*x==0||*x==1) *x = 1;
else if (*x <= 0) *x = -1;
else *x * recursiveFactorialByReference(ptr); //this is where the error occurs
}

int main(){
int x, *ptr=&x, **pptr=&ptr, y;
printf("Enter a positive integer: ");
scanf("%d",*&x);
y = x;
printf("%i! = %in",y,recursiveFactorialByValue(x));

recursiveFactorialByReference(ptr);
printf("%i! = %in", y, x);
return 0;
}

我得到此错误:

In function 'recursiveFactorialByReference':
14:7: error: void value not ignored as it ought to be
else recursiveFactorialByReference(ptr) * *x;

我尝试了不同的函数调用:

else *x = *x *recursiveFactorialByReference( *x-1);

else *x = *x *recursiveFactorialByReference(ptr);

,这些工作都没有,我找不到问题。

*x * recursiveFactorialByReference(ptr)

这将指向的值乘以x(是int),其返回值(recursiveFactorialByReference的返回值)(是void),这是没有意义的。考虑一下您的递归功能:您将其传递给INT的指针,然后用其阶乘代替int 。因此,您的递归部分看起来应该这样:

else
{
    recursiveFactorialByReference(ptr);
    *x *= *ptr;
}

请注意,您仍然必须分配给*x。自行乘以它只是扔掉值。

另外,您的SCANF调用中还有额外的*。应该是

scanf("%d", &x);

也不是技术上的"参考"(这是C 的概念)。您的两个功能都通过值,后者恰好是通过 pointers的 value

最新更新