如何使用递归实现一个在两个数值数组之间找到交集的方法?

时间:2016-11-12 20:39:02

标签: arrays recursion data-structures

我开始学习递归,老师给了我这个任务。我一直试图找到一个星期的解决方案,但到目前为止我无法取得任何进展。我使用递归做了一些简单的练习,但这对我来说有点困难,所以我请你们帮助我理解哪种方法是实现这种方法的最佳方法。顺便说一下,我来自巴西,对不起任何语法错误。

1 个答案:

答案 0 :(得分:0)

我将简要介绍一下你能做些什么。

由于正在使用递归来查找交集,我假设这两个数组是按排序顺序给出的,因此它们没有重复的元素。我也使用基于1的数组索引来便于理解。

以下是您可以做的事情:

  1. 维护两个额外的变量(Position1Position2),以便在递归过程中跟踪数组中元素的当前位置。

  2. 首先检查要比较的元素的当前位置是否在数组限制范围内。如果不是,我们已经完成了我们的程序。

  3. 然后比较两个阵列中当前位置的元素。

  4. 如果元素相等,请在我们找到交叉点时打印它们。考虑两个数组的下一个元素并进行相应的递归调用。

  5. 否则,如果第一个数组中的当前元素大于第二个数组中的当前元素,我们将考虑第二个数组中的下一个元素。相应地进行递归调用。

  6. 否则,如果第一个数组中的当前元素小于第二个数组中的当前元素,我们将考虑第一个数组的下一个元素。相应地进行递归调用。

  7. 这是一个伪代码,显示了上面给出的步骤:

    Intersection(Array1, Length1, Position1, Array2, Length2, Position2)
    {
        if(Position1 > Length1 OR Position2 > Length2)
            return;
        if(Array1[Position1] == Array2[Position2])
        {
            print Array1[Position1];
            call Intersection(Array1, Length1, Position1 + 1, Array2, Length2, Position2 + 1);
        }
        else if(Array1[Position1] > Array2[Position2])
        {
            call Intersection(Array1, Length1, Position1, Array2, Length2, Position2 + 1);
        }
        else
        {
            call Intersection(Array1, Length1, Position1 + 1, Array2, Length2, Position2);
        }
    }