为什么会有无限递归?

时间:2016-03-05 02:53:47

标签: recursion

给定以下函数定义,调用dub(2.0, 4)返回什么值?

double dub(double z, int n) {
    if (z == 0) return z;
    return 2 * dub(z, n-1);
}

2 个答案:

答案 0 :(得分:0)

  

通话dub(2.0, 4)返回的是什么值?

它不会返回,更不用说返回任何值。

原因是z永远不会成为0,因此您的基本情况永远不会成为真,因此函数永远不会返回。所以它被无数次调用,你已经看到了你的标题所说的。递归函数在到达基本情况时结束,在您的情况下,永远不会达到基本情况。

阅读递归:

这可能是你最初想要的:

double dub(double z, int n) {
    if (n == 0) return z; // checking if n is 0, instead of z
    return 2 * dub(z, n-1);
}

答案 1 :(得分:0)

你的问题不是很明确,你问这个函数为什么导致无限递归?"如果是这样,原因是因为您在边缘条件中检查错误的值。该函数应该写成

double dub(double z, int n) {
  if (n == 0) return z;
  return 2 * dub(z, n-1);
}

noitice条件已更改为n == 0而不是z == 0