【问题标题】:Factorial recursion with a pass by reference function call?通过引用传递函数调用的阶乘递归?
【发布时间】:2018-03-07 20:25:02
【问题描述】:

我想使用 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;

我尝试过不同的函数调用,例如:

否则 *x = *x * recursiveFactorialByReference(*x-1);

否则 *x = *x * recursiveFactorialByReference(ptr);

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

【问题讨论】:

  • recursiveFactorialByReference 不返回任何内容,因此 *x * recursiveFactorialByReference(ptr); 没有任何意义。 C也不支持按引用传递,您将指针作为参数(按值)传递

标签: c recursion parameters factorial


【解决方案1】:
*x * recursiveFactorialByReference(ptr)

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

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

请注意,您仍然必须分配给*x。将其单独相乘只会丢弃价值。

您的 scanf 通话中还有一个额外的*。应该是

scanf("%d", &x);

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

【讨论】:

  • 非常感谢!!我现在明白了!我正在使用“scanf("%d",*pptr);"起初忘记删除 * 之前用 &x 替换它。再次感谢!
猜你喜欢
  • 2019-08-06
  • 1970-01-01
  • 2020-10-02
  • 2015-04-16
  • 1970-01-01
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
相关资源
最近更新 更多