通过引用函数调用传递阶乘递归?
Factorial recursion with a pass by reference function call?
我想使用“按引用传递”方法创建递归阶乘。
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);
和none这些工作,我找不到问题请帮助。
*x * recursiveFactorialByReference(ptr)
这会将 x
指向的值(即 int
)与 recursiveFactorialByReference
的 return 值(即 void
)相乘, 这没有意义。想一想你的递归函数做了什么:你将一个指向 int 的指针传递给它,它 用它的阶乘替换 那个 int。所以你的递归部分应该是这样的:
else
{
recursiveFactorialByReference(ptr);
*x *= *ptr;
}
请注意,您仍然需要分配给 *x
。将它单独相乘只会丢弃该值。
此外,您的 scanf 调用中还有一个额外的 *
。应该是
scanf("%d", &x);
此外,这些在技术上不是 "references"(这是 C++ 的概念)。您的两个函数都在传递值,后者恰好传递了 values of pointers.
我想使用“按引用传递”方法创建递归阶乘。
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);
和none这些工作,我找不到问题请帮助。
*x * recursiveFactorialByReference(ptr)
这会将 x
指向的值(即 int
)与 recursiveFactorialByReference
的 return 值(即 void
)相乘, 这没有意义。想一想你的递归函数做了什么:你将一个指向 int 的指针传递给它,它 用它的阶乘替换 那个 int。所以你的递归部分应该是这样的:
else
{
recursiveFactorialByReference(ptr);
*x *= *ptr;
}
请注意,您仍然需要分配给 *x
。将它单独相乘只会丢弃该值。
此外,您的 scanf 调用中还有一个额外的 *
。应该是
scanf("%d", &x);
此外,这些在技术上不是 "references"(这是 C++ 的概念)。您的两个函数都在传递值,后者恰好传递了 values of pointers.