【问题标题】:Program that prints the smallest element greater than x in a given unsorted array A[]打印给定未排序数组 A[] 中大于 x 的最小元素的程序
【发布时间】:2019-02-27 04:30:06
【问题描述】:

我必须编写一个使用递归的程序,其输入是一个正数数组 A 和一个正数 x。程序应该打印 A 中大于 x 的最小元素。如果这样的元素不存在,程序应该打印 -1。为了 例如,如果 A = [1, 3, 5, 3, 6, 5] 和 x = 3,那么程序应该打印 5。

我已经通过常规方法解决了这个程序,没有使用递归如下:

FindNum(A[ ], x) {
result = -1;
for (i = 0; i < len(A[ ]); i++) {
if (A[i] > x AND (result > A[i] OR result == -1)) {
result = A[i];
}
}
print (result);
}

我已经在 python 中相应地实现了这个伪代码,它工作正常。现在我必须使用递归来做到这一点。我已经尝试过,但我不太确定如何正确实施:

FindNum(A [ ], x) {
i = len(A[]) - 1;
result = -1;
while (i > 0 {
if (A[i] > x AND (result > A[i] OR result == -1)) {
result = A[i];
i--;
}
FindNum(A[i], x);
}
print result;
}

【问题讨论】:

  • 如果您使用 python 编码,则无需放置 ;。另外,请参阅代码缩进。你确定你已经用 python 编码了吗?甚至函数声明也不正确。
  • 这是伪代码。我分别在 python 中编写了代码,以测试在非递归解决方案中运行良好的代码。我正在做编程练习。我不必输入特定的语言,只需要在伪代码中获得正确的程序逻辑。很抱歉问题中的混乱。
  • 如果没有适当的缩进,这段代码是相当不可读的。

标签: algorithm data-structures array-algorithms


【解决方案1】:

具有简单条件的 Python 递归函数(没有单行)。它找到列表尾部的结果,然后尝试使用当前元素对其进行改进

def mingreater(A, x):
    if 0 == len(A):
        return -1
    result = mingreater(A[1:], x)
    if result > 0:
        if A[0] > x:
            return min(result, A[0])
    else:
        if A[0] > x:
            return A[0]
    return result

没有 Python 特定的切片:

def mingreater(A, x, idx):
    if idx == len(A):
        return -1
    result = mingreater(A, x, idx + 1)
    if result > 0:
        if A[idx] > x:
            return min(result, A[idx])
    else:
        if A[idx] > x:
            return A[idx]
    return result

【讨论】:

  • 感谢您的解决方案。是否有可能获得该问题的通用伪代码,因为我不是python专家,无法理解完整代码。
  • 但是.. 是你提到的 Python :)。是的,有可能 - 引入参数 idx 来标记要处理的数组/列表的尾开始索引,使用 idx+1 进行递归调用,使用 A[idx] 而不是 A[0]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2020-08-22
  • 2018-08-31
  • 1970-01-01
相关资源
最近更新 更多