使用引用函数调用的因子递归?

时间:2017-09-26 14:36:48

标签: c recursion parameters factorial

我想使用Pass By Reference方法创建一个递归因子。

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;
}

我收到此错误:

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);

并且这些都不起作用,我无法找到问题,请帮忙。

1 个答案:

答案 0 :(得分:1)

*x * recursiveFactorialByReference(ptr)

这会将x指向的值(int)与返回值recursiveFactorialByReferencevoid)相乘,这没有任何意义。想想你的递归函数做了什么:你传递一个指向int的指针,用它的factorial替换那个int。所以你的递归部分应该是这样的:

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

请注意,您仍需要分配到*x。单独乘以它只会丢掉价值。

您的scanf调用中还有额外的*。它应该是

scanf("%d", &x);

这些技术上也不是“引用”(这是C ++的概念)。这两个函数都传递了值,后者恰好传递了指针的