我开始学习递归,老师给了我这个任务。我一直试图找到一个星期的解决方案,但到目前为止我无法取得任何进展。我使用递归做了一些简单的练习,但这对我来说有点困难,所以我请你们帮助我理解哪种方法是实现这种方法的最佳方法。顺便说一下,我来自巴西,对不起任何语法错误。
答案 0 :(得分:0)
我将简要介绍一下你能做些什么。
由于正在使用递归来查找交集,我假设这两个数组是按排序顺序给出的,因此它们没有重复的元素。我也使用基于1的数组索引来便于理解。
以下是您可以做的事情:
维护两个额外的变量(Position1
和Position2
),以便在递归过程中跟踪数组中元素的当前位置。
首先检查要比较的元素的当前位置是否在数组限制范围内。如果不是,我们已经完成了我们的程序。
然后比较两个阵列中当前位置的元素。
如果元素相等,请在我们找到交叉点时打印它们。考虑两个数组的下一个元素并进行相应的递归调用。
否则,如果第一个数组中的当前元素大于第二个数组中的当前元素,我们将考虑第二个数组中的下一个元素。相应地进行递归调用。
否则,如果第一个数组中的当前元素小于第二个数组中的当前元素,我们将考虑第一个数组的下一个元素。相应地进行递归调用。
这是一个伪代码,显示了上面给出的步骤:
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);
}
}