zoukankan      html  css  js  c++  java
  • 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&,也是同样原因。

  • 相关阅读:
    内核驱动系列中断和定时器
    apue2 阅读笔记第四章
    apue2 阅读笔记 第五章
    apue2阅读笔记 第6.7章
    再试试windows7版得writer
    内核驱动系列内核调试方法
    apue2 阅读笔记第三章
    杂谈关于代码库
    know everything about something
    React的父子传值(父传子)
  • 原文地址:https://www.cnblogs.com/Hello-Nolan/p/12342964.html
Copyright © 2011-2022 走看看