输入数组并查找数字是否在该数组中(全部使用递归)c ++

时间:2016-01-23 17:19:09

标签: c++ recursion

#include <iostream>
#include <cstdlib>


using std:: cin;
using std:: cout;
using std:: endl;

const int N=10;

void readarray(int array[], int N);
int find_num(int array[], int size);


int main ()
{
   int array[N];
   readarray (array, N);
   cout << find_num(array, N);

   return EXIT_SUCCESS;
}



 void readarray(int array[], int N)
 // this function is for inputting an array also using recursion
 {
   int i=0;
   if (i < N)
   {
        cin >> array[i];
        readarray(array+1, N-1);
   }
 }


 int find_num(int array[], int size)
 // this function is for checking if a number is in the array that 
 // was inputted
 {
    int n;
    cin >> n;

    if (n==array[0])
        return 1;
    else if (n!=array[0]){
        find_num(array+1, size-1);
            return 1;
    }
    else return 0;
  }

显然,程序的重点是只使用递归。我遇到了第二个函数的问题,该函数应该检查是否在数组中找到了数字。如果在数组中找到了数字,那么输出将为1,如果不是那么它应该是0.问题是,它似乎需要更多的输入而且总是输出数字1(无论数字是多少)被发现与否)。我相信我错过了一小步。我也想问一下void函数是否也正确(看起来它对我来说工作正常)。感谢。

1 个答案:

答案 0 :(得分:1)

递归函数有两个终止条件。

  1. 如果您到达数组的末尾,则表示您找不到号码nreturn 0

  2. 如果您找到了号码n return 1

  3. 如果你没有找到数组的末尾并且找不到数字,请调用你的函数rcursive,得到结果然后返回。

    除此之外,您要搜索的号码必须是您的函数find_num的输入。你不想一次又一次地要求一个号码。

    int find_num(int n, int array[], int size)
    {
        if ( size == 0 )
            return 0; // end of array, n was not found
        if ( n == array[0] )
            return 1; // n was found
        return find_num( n, array+1, size-1 ); // test next element of array
    }
    
    void readarray(int array[], int N)
    { 
        if ( N > 0 )
        {
            cin >> array[0];
            readarray( array+1, N-1 );
        }
    }
    
    int main ()
    {
       int array[N];
       readarray( array, N );
    
       int n;
       cin >> n;
       cout << find_num( n, array, N );
    
       return EXIT_SUCCESS;
    }