递归函数总是返回False

时间:2019-09-30 03:05:09

标签: c++ recursion

我的递归程序到达指定的目标时,即使看起来应该正确,也不会返回true。它只是返回false,然后终止,我不知道为什么。

我试图以各种可能的方式重新排列If / Else语句的顺序,我尝试使用cout对其进行调试,看起来它应该返回true,但事实并非如此。

#include <iostream>
using namespace std;

bool isNumberInArray(const int anArray[], int first, int last, int targetNum) {

  if (first > last) { //if last number is less than the first number to be searched
    return false; //Returns false if the size of the array to be searched is less than the first element of the array
  }

  if (anArray[last] == targetNum) { //if number at "last" position is equal to the target
    return true; //Returns true if the target is found at the last position
  }

    else { //run again, with last = last - 1
    cout << "searching for " << targetNum << "; ran else; position " << last << " value " << anArray[last] << "\n";
    //previous line used for testing purposes
    isNumberInArray(anArray, first, (last - 1), targetNum);
  }

    }

int main() {
  int numberArray[10] = {1, 2, 3, 11, 5, 6, 7, 8, 9, 10};
  if (isNumberInArray(numberArray, 0, 9, 11t))
    cout << "True\n";
  else
    cout << "False\n";
  return 0;
}

当last的值到达targetNum所在的位置时,该程序应该实际返回“ true”,但是即使它为true,它也始终返回false,我不知道为什么。当程序到达targetNum时,我放置在函数中的cout语句甚至停止,但是它仍然返回false:

搜索11;跑了排名9的值10

搜索11;跑了位置8的值9

搜索11;跑了位置7的值8

搜索11;跑了位置6的值7

搜索11;跑了位置5的值6

搜索11;跑了位置4的值5

错误

11在位置3。

1 个答案:

答案 0 :(得分:1)

您需要在else子句中返回递归调用的结果。

else { //run again, with last = last - 1
    cout << "searching for " << targetNum << "; ran else; position " << last << " value     " << anArray[last] << "\n";
    //previous line used for testing purposes
    return isNumberInArray(anArray, first, (last - 1), targetNum);
  }

如果您咨询的第一项是您要查找的内容,它将返回true,但是,它将永远不会检查isNumberInArray()的进一步调用,因为您永远不会检查该值。当程序最终运行到第一个调用时,它将输入if(first> last)并返回false,而实际上它应该从isNumberInArray返回值。