【问题标题】:check if given integer is sum of given array elements (or part of them) using only recursion仅使用递归检查给定整数是否是给定数组元素(或其中一部分)的总和
【发布时间】:2023-03-21 22:10:02
【问题描述】:

给定一个整数数组,我需要实现一个函数来检查某个部分数组是否等于给定的总和,仅使用递归。要实现的函数如下所示:

boolean isPartialSum(int[] array, int total);

我也可以使用以下函数,也只能递归:

boolean isPartialSum(int[] array, int index, int total);

不允许使用循环,也不允许使用其他辅助函数。 对于 {1,5,8} 作为数组和 9 作为总数的输入,答案应该是正确的,因为 1+8=9。

【问题讨论】:

  • 那么是否有关于数据集的任何规范,即提供的数组?
  • 不,只是它们都是整数

标签: arrays recursion


【解决方案1】:

假设您有一个长度为n 的数组a[]。然后是查找某些元素的总和是否给出数字s的伪代码:

boolean isPartialSum (a[], i, s):
    if s == 0:
      return true
    if i == n:
      if a[n] == s:
        return true
      else:
        return false
    if i < n:
      if isPartialSum(a, i + 1, s - a[i]):
        return true
      else if isPartialSum(a, i + 1, s):
        return true
      else:
        return false

要查明该区域的某些元素加起来是否等于s,只需调用

isPartialSum(a, 1, s)

假设你的数组的索引从1开始编号。

更新证明:上述算法递归地遍历a[] 的所有子集(即2^n 子集),并确定每个元素的总和是否等于s。因此,算法是正确的。

【讨论】:

  • 除了某些情况外,这还不够。它不是那么直截了当。
  • 这在不相邻的数组元素之和的情况下不起作用。
  • 添加了 s = 0 的情况和算法有效的证明。 ps:如果我对任务的理解有误,请纠正我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 2012-11-18
  • 1970-01-01
  • 2012-12-05
相关资源
最近更新 更多