Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรมแบบเรียกซ้ำเพื่อค้นหาองค์ประกอบเชิงเส้นในอาร์เรย์ที่กำหนดใน C++


กำหนดอาร์เรย์จำนวนเต็ม Arr[] ที่มีตัวเลขจำนวนเต็มในลำดับใดก็ได้ เป้าหมายคือการค้นหาวาลจำนวนเต็มอินพุตที่มีอยู่ในอาร์เรย์โดยใช้การค้นหาแบบเรียกซ้ำในอาร์เรย์

หากไม่พบ val ในอาร์เรย์อินพุต Arr[] ให้ส่งคืน -1 พิมพ์ดัชนีของ val หากพบใน Arr[].

ตัวอย่าง

ป้อนข้อมูล −Arr[] ={11,43,24,50,93,26,78} วาล=26

ผลผลิต − 26 พบที่ดัชนี 5

คำอธิบาย

Elements in the array start from index 0 to index=array length -1.
First index=0 last index=6 : 11 != 26, 78 != 26 → 0+1 , 6-1
First index=1 last index=5 : 43 != 26, 26 = 26 return 5
26 is present at index 5.

ป้อนข้อมูล − Arr[] ={11,43,24,50,93,26,78} วาล=66

ผลผลิต − 66 ไม่ปรากฏ

คำอธิบาย

Elements in the array start from index 0 to index=array length -1.
First index=0 last index=6 : 11 != 66, 78 != 66 → 0+1 , 6-1
First index=1 last index=5 : 66 != 26, 66 != 26 → 1+1 , 5-1
First index=2 last index=4 : 24 != 66, 93 != 66 → 2+1 , 4-1
First index=3 last index=3 : 50 != 26, 50 != 26 → 3+1 , 3-1
First index=3 last index=2 3>2 end
66 not found.

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

ในแนวทางนี้ เราจะสำรวจอาร์เรย์เป็นเส้นตรงจากปลายทั้งสองข้าง เปรียบเทียบค่าอินพุตกับองค์ประกอบที่ปลายทั้งสองข้าง หากพบ ให้ส่งคืนดัชนีอื่นๆ ซ้ำๆ ตรวจสอบองค์ประกอบถัดไปด้วย first index=prev first index+1 และ last index=prev last index-1 ในกรณีที่ดัชนีแรก>ดัชนีสุดท้ายไม่พบองค์ประกอบ

  • นำอาร์เรย์อินพุต Ar[] ที่มีองค์ประกอบจำนวนเต็ม

  • นำองค์ประกอบที่จะค้นหาเป็น val.

  • ฟังก์ชัน searchRec(int arr[], int start,int end, int num) รับอาร์เรย์ ดัชนีแรกและดัชนีสุดท้าย และค่า num ที่จะค้นหาและส่งคืนดัชนีหากพบ

  • หาผลลัพธ์ของตัวแปรเป็น -99

  • ถ้า arr[start] ==​​num ให้ตั้งค่าผลลัพธ์เป็น start

  • ถ้า arr[end] ==num ให้ตั้งค่าผลลัพธ์เป็น end

  • if (start> end) ให้ตั้งค่า result=-1 เมื่อสำรวจทั้งอาร์เรย์

  • หากผลลัพธ์มีค่าอื่นที่ไม่ใช่ -99 ให้ส่งคืนผลลัพธ์อื่น ค้นหาซ้ำโดยใช้ searchRec(arr, start + 1, end - 1, num)

  • ภายในเช็คหลักส่งคืนมูลค่าและพิมพ์ผลตาม

ตัวอย่าง

#include<bits/stdc++.h>
using namespace std;
int searchRec(int arr[], int start,int end, int num){
   int result=-99;
   if (start > end){
      result= -1;
   }
   if (arr[start] == num){
      result=start;
   }
   if (arr[end] == num){
      result=end;
   }
   if( result!=-99){
      return result;
   }
   return searchRec(arr, start + 1, end - 1, num);
}
int main(){
   int Arr[] = {11,43,22,56,33,26,78};
   int i;
   int len = sizeof(Arr) / sizeof(Arr[0]);
   int val = 56;
   int pos = searchRec(Arr, 0, len - 1, val);
   if (pos == -1){
      cout<<val<<" is not present" ;
   }
   else{
      cout<<val<<" found at index "<<pos;
   }
   return 0;
}

ผลลัพธ์

หากเรารันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้

56 found at index 3