使用递归查找两个数组是否具有公共数字

时间:2016-06-22 16:51:21

标签: c arrays recursion

问题是这样的: 编写一个递归函数,获取两个正整数数组及其大小。 如果存在至少一个公共对象,则该函数返回0;如果不存在,则返回1。

int disjoint(int a[], int n1, int b[], int n2)

要求如下:

  • 没有辅助功能
  • 没有循环
  • 不更改数组
  • 仅递归

我目前在获取所有组合进行比较时遇到问题,换句话说,如何将嵌套循环转换为递归。

更新 这个可行,但它会进行不必要的迭代。

int disjoint(int g1[], int n1 , int g2[], int n2 ){
if(g1[0]==g2[0])return 0;
if(n2-1>0&&n1-1>=0){
return disjoint(g1+1,n1-1,g2,n2)*disjoint(g1,n1,g2+1,n2-1);
}
return 1;
}

1 个答案:

答案 0 :(得分:2)

我没有为你解决但是......

使用伪注释:如果a[0..n]b[0..m]a[0] != b[0]不相交a[1..n]和b[0..m]是不相交的em> a[0..n]b[1..m]是不相交的。

认为我做对了......

好的,另一个提示:其中一个递归调用可能看起来像disjoint(a + 1, n1 - 1, b, n2)

在进行递归时,它(至少对我而言)更好地查看问题并根据问题本身制定解决方案,而不是编写迭代解决方案然后尝试"翻译& #34;它