• 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&,也是同样原因。

  • 相关阅读:
    怎样用HTML5 Canvas制作一个简单的游戏
    js面向对象
    javascript闭包
    javascript变量的作用域
    5-22
    5-23
    14-5-21 硬代码
    14-5-19 类和对象
    array
    生成干扰线
  • 原文地址:https://www.cnblogs.com/Hello-Nolan/p/12342964.html
Copyright © 2020-2023  润新知