একটি পূর্ণসংখ্যার অ্যারে দেওয়া থাকলে, রিকারসিভ লিনিয়ার সার্চ দিয়ে একটি নির্দিষ্ট মান খুঁজে বের করতে হবে। না পেলে -1 ফেরত দিন।
উদাহরণ
ইনপুট − Arr[] = {11,43,24,50,93,26,78}, val = 26
আউটপুট − 26 found at index 5
ব্যাখ্যা − অ্যারে ০ থেকে ৬ পর্যন্ত ইনডেক্স। প্রথমে ০ ও ৬ চেক করা হয়, তারপর ১ ও ৫, সেখানে ২৬ মিলে যায়।
ইনপুট − Arr[] = {11,43,24,50,93,26,78}, val = 66
আউটপুট − 66 is not present
ব্যাখ্যা − প্রথম ও শেষ ইনডেক্স থেকে চেক করে প্রথম ইনডেক্স শেষ ইনডেক্সের চেয়ে বড় হলে সার্চ বন্ধ।
প্রোগ্রামে ব্যবহৃত পদ্ধতি
অ্যারে দুটি প্রান্ত থেকে লিনিয়ারলি ট্রাভার্স করা হয়। প্রথম ও শেষ এলিমেন্ট চেক করে না পেলে রিকারসিভভাবে পরবর্তী জোড়া চেক করা হয়।
ইনপুট অ্যারে
Ar[]ও সার্চ মানvalনিন।searchRec(int arr[], int start, int end, int num)ফাংশন অ্যারে, প্রথম ও শেষ ইনডেক্স ও সার্চ মান নিয়ে ইনডেক্স ফেরত দেয়।result = -99ইনিশিয়ালাইজ করুন।যদি
arr[start] == numহয়,result = start।যদি
arr[end] == numহয়,result = end।যদি
start > endহয়,result = -1।যদি
result != -99হয়, ফেরত দিন, অন্যথায়searchRec(arr, start+1, end-1, num)কল করুন।main-এ ফলাফল অনুযায়ী প্রিন্ট করুন।
উদাহরণ কোড
#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 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