在给定的未排序数组A []中打印大于x的最小元素的程序

时间:2019-02-27 04:30:06

标签: algorithm data-structures array-algorithms

我必须使用递归的程序,其输入是正数和正数x的数组A。程序应打印大于x的A的最小元素。如果不存在这样的元素,则程序应打印-1。对于 例如,如果A = [1、3、5、3、6、5]且x = 3,则程序应打印5。

我已通过常规方法解决了该程序,而无需使用以下递归程序:

//Method to valdate the input against the datalist items.
var myApp = angular.module("my-app", []);

myApp.controller("myController", function($scope) {
$scope.Countries = [{name: "Nepal"}, {name: "India"}, {name: "China"}, {name: "Pakistan"}];

$scope.ValidateInput = function (InputId) {
	var listId = '#' + $(InputId).attr('list');

	$(InputId).removeAttr('style');

	$(listId).each(function () {
		if (!$(InputId).val() || !$(this).text().toLowerCase().includes($(InputId).val().toLowerCase())) {
			$(InputId).css('border', '3px solid red');
			return false;
		}
	});
}
});

我已经相应地在python中实现了此伪代码,并且工作正常。现在,我必须使用递归操作。我曾尝试这样做,但是我不确定如何正确实现它:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<div ng-app="my-app" ng-controller="myController">
<input id="input-id" list="datalist-id" type="text" placeholder="Select Country" ng-keyup="ValidateInput('#input-id')" autocomplete="off" />
<datalist id="datalist-id">
    <div ng-repeat="country in Countries">
        <option> {{country.name}} </option>
    </div>
</datalist>
</div>

1 个答案:

答案 0 :(得分:3)

具有简单条件的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