19. 查找元素函数(递归方法)

题目:

编写一个模板递归函数,确定元素 x 是否属于数组a [ 0 : n - 1 ]。

思路:

题目中没有说数组有序,那么默认为无序数组,应该用线性查找。同时是递归的,就应该从头或尾一个一个比较,相等时返回找到,否则递归调用函数,传入参数是数组,并且元素个数少一个。

函数退出的条件有两个:

1. 当由元素个数小于 0 时,说明目标元素不在数组中,没有找到。

2. 查找成功。

代码:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 template <typename T>
 5 bool is_find (const T* a, int n, const T& target) {
 6     if (n - 1 < 0) {
 7         return false;
 8     }
 9     if (a[n - 1] == target) {
10         return true;
11     } else {
12         return is_find(a, n - 1, target);
13     }
14 }
15 
16 int main()
17 {
18     int a[5] { 0, 1, 2, 3, 4 };
19     int target;
20     cout << "Enter target : ";
21     cin >> target;
22     bool found = is_find(a, 5, target);
23     cout << "result : " << found << endl;
24 
25     return 0;
26 }

代码中有几处需要说明:

1. 函数的边界条件为 n - 1 < 0。比如:数组 a,包含 5 个元素,但是最后一个元素下标是 4 。当数组还剩余 1 个元素时,下标为 0,这时 n - 1 = 0, 当数组中没有元素时,n - 1 = -1 < 0,表示没有找到。

2. 传入的数组声明为 const,因为不改变其元素;目标元素声明为const&,也是同样原因。

猜你喜欢

转载自www.cnblogs.com/Hello-Nolan/p/12342964.html