簡體   English   中英

輸入數組並查找該數組中是否有數字(均使用遞歸)c ++

[英]inputting an array and finding if a number is in that array (all using recursion) c++

#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. 如果到達數組的末尾,則找不到數字nreturn 0

  2. 如果找到數字n return 1

如果未到達數組末尾且未找到編號,請調用函數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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM