Программа, которая печатает наименьший элемент больше чем x в данном несортированном массиве A [] - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть программа, использующая рекурсию, чьи входные данные представляют собой массив 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;
}

1 Ответ

0 голосов
/ 27 февраля 2019

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
...