C++语言中用于线性搜索给定数组中元素的递归程序
给定一个整数数组Arr[],其中包含任意顺序的整数。目标是使用数组上的递归搜索查找数组中存在的输入整数val。
如果在输入数组Arr[]中找不到val,则返回-1。如果在Arr[]中找到val,则打印val的索引。
示例
输入−Arr[] = {11,43,24,50,93,26,78} val=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} val=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递归检查下一个元素。如果first index>last index,则表示未找到元素。
使用整数元素获取输入数组Ar[]。
将要搜索的元素作为val。
函数searchRec(int arr[], int start,int end, int num)接收一个数组、第一个和最后一个索引以及要搜索的值num,如果找到则返回索引。
将变量result设为-99。
如果arr[start] == num,则将result设为start
如果arr[end] == num,则将result设为end
如果(start > end),则将result设为-1。因为已经遍历了整个数组
如果result的值不为-99,则返回result;否则,使用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
广告