C 通过引用传递函数调用的阶乘递归?

C 通过引用传递函数调用的阶乘递归?,c,recursion,parameters,factorial,C,Recursion,Parameters,Factorial,我想使用passbyreference方法创建一个递归阶乘 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 *pt

我想使用passbyreference方法创建一个递归阶乘

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! = %i\n",y,recursiveFactorialByValue(x));


recursiveFactorialByReference(ptr);
printf("%i! = %i\n", y, x);
return 0;
}
我尝试过不同的函数调用,如:

else*x=*x*递归factorialByReference(*x-1)

else*x=*x*递归factorialbyreference(ptr)

这些都不行,我找不到问题,请帮忙

*x * recursiveFactorialByReference(ptr)

这将
x
(这是一个
int
)所指向的值与
递归factorialbreference
(这是
void
)的返回值相乘,这是没有意义的。考虑一下递归函数的作用:向它传递一个指向int的指针,它用其阶乘替换该int。因此,递归部分应如下所示:

else
{
    recursiveFactorialByReference(ptr);
    *x *= *ptr;
}
请注意,您仍然必须分配给
*x
。将其自身相乘只会丢掉价值

此外,您的scanf呼叫中还有一个额外的
*
。应该是

scanf("%d", &x);

而且,从技术上讲,这些不是“引用”(这是C++中的一个概念)。您的两个函数都在传递值,后者恰好传递指针的值。

recursiveFactorialByReference
不返回任何内容,因此
*x*recursiveFactorialByReference(ptr)没有任何意义。另外,C不支持按引用传递,您正在将指针作为参数(按值)传递,非常感谢!!我现在明白了!起初我使用的是“scanf(“%d”,*pptr);”,但在用&x替换它之前忘记了删除*。再次非常感谢!
scanf("%d", &x);