我必须使用递归的程序,其输入是正数和正数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>
答案 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