首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用递归检查数组元素是否为前面两个元素的和

使用递归检查数组元素是否为前面两个元素的和
EN

Stack Overflow用户
提问于 2011-08-29 11:36:51
回答 4查看 2.1K关注 0票数 5

我在解决一本书上的练习题时,偶然发现了这个问题:

*描述一种递归算法,该算法将检查整数数组A是否包含整数Ai,该整数Ai是A中较早出现的两个整数的和,即

代码语言:javascript
运行
复制
 A[i] = A[j] +A[k] for j,k < i.

*

我已经考虑这个问题几个小时了,但是还没有想出一个好的递归算法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-31 03:45:07

没有任何循环(伪代码)的递归解决方案:

代码语言:javascript
运行
复制
bool check (A, i, j, k)
    if (A[j] + A[k] == A[i])
        return true
    else
        if      (k + 1 < j)      return check (A, i, j, k + 1)
        else if (j + 1 < i)      return check (A, i, j + 1, 0)
        else if (i + 1 < A.size) return check (A, i + 1, 1, 0)
        else                     return false

使用check(A, 2, 1, 0)调用递归函数。为了突出显示算法的主要部分,它不检查数组最初是否有两个以上的元素。

票数 2
EN

Stack Overflow用户

发布于 2011-08-29 11:49:39

效率不是很高,但是..

代码语言:javascript
运行
复制
search(A, j, k) {
   for (int i = 0; i < A.length; i++) {
      if (A[i] == A[j] + A[k]) {
         return i;
      }
   }
   if (k + 1 == A.length) {
      if (j + 1 < A.length) {
         return search(A, j + 1, 0);
      }
      return -1; // not found
   }
   return search (A, j, k + 1);
}

使用以下命令开始搜索

代码语言:javascript
运行
复制
search(A, 0, 0);
票数 1
EN

Stack Overflow用户

发布于 2020-06-01 03:33:05

代码语言:javascript
运行
复制
  /**
   * Describe a recursive algorithm that will check if an array A of integers contains
   * an integer A[i] that is the sum of two integers that appear earlier in A, 
   * that is, such that A[i] = A[j]+A[k] for j,k < i.
   * @param A - array
   * @param i - initial starting index (0)
   * @param j - initival value for j (0)
   * @param k - initial value for k (0)
   * @param n - length of A - 1
   * @return - true if combination of previous 2 elements , false otherwise
   */
  public boolean checkIfPreviousTwo(int[] A, int i, int j, int k, int n){
    if(i >= n) return false;
    if(j < i && k < i){
      if(A[j] + A[k] == A[i]) return true;
      return(
        checkIfPreviousTwo(A, i, j + 1, k, n) ||
        checkIfPreviousTwo(A, i, j, k + 1, n)
      );
    }
    return checkIfPreviousTwo(A, i + 1, j, k, n);
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7225823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档