กำหนดอาร์เรย์จำนวนเต็ม 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