使用递归的成员测试

A member test using Recursion

本文关键字:成员 测试 递归      更新时间:2023-10-16

我很难理解递归。我在这里寻找一些反馈,看看这个程序看起来如何。

问题:::编写名为isMember的递归布尔函数。该函数应该接受三个参数:一个整数数组,一个表示数组中元素数量的整数,以及一个要搜索的整数值。如果在数组中找到该值,该函数应该返回true,如果没有找到该值,则返回false。在程序中演示该函数的用法,该程序要求用户输入一个数字数组和一个要搜索的值。

What I have::

   #include <iostream>
using namespace std;
bool isMember(int[],int,int);

int main()
{
    const int SIZE = 10;
    int numSearch;
    int elementz[SIZE];
    for(int i = 0; i < SIZE; i++)
    {
        cout << "Element " << i + 1 << "t";
        cin >> elementz[i];
    }
    cout << "Enter element to searchn";
    cin >> numSearch;
    bool value = isMember(elementz,SIZE,numSearch);
    if(value ==1)
        cout << "Element is foundn";
    else
        cout << "Element not foundn";
    return 0;
}

bool isMember(int arr[], int sizze, int num)
{
    if(arr[sizze] == num)
        return true;
    else
        isMember(arr,sizze -1, num);
}

如果if子句为假,则函数不返回。此外,请记住索引从0开始,而不是1(为什么是sizze ?)。

我建议从包含3个值的数组开始,而不是10个。这样,您就可以手动跟踪和展开连续的呼叫。

为了使递归工作,您不仅需要一个"条件停止",而且还需要一个非条件停止。

在您的示例中,您只提供了一个条件停止。要使其正常工作,请尝试这样做:

bool isMember(int arr[], int sizze, int num)
{
    if ( sizze < 0 )  // "inconditional stop"
        return false;
    if(arr[sizze] == num)  // conditional stop. It could happen or not
        return true;
    else
        isMember(arr,sizze -1, num);
}