首页 > 解决方案 > 递归方法有问题吗?

问题描述

如果有负元素,我正在尝试验证数组 [1..199] 的所有元素。此代码不验证数组的第一个元素。我有义务通过递归方法来做到这一点。

我试图做一个单独的条件,但这没有奏效。我先用 for 做,然后改成递归方法。

   Var a:array[1..100] of integer;n:integer;

        Function E(n:integer):boolean;
          Begin
           if n=0 then E:=False
            else if a[n]<0 then E:=True
             else E:=E(n-1);
          End;

     Begin
      readln(n);
      for i:=1 to n do
        readln(a[i]);
      writeln('Are there negative numbers in array? ',E(n));
      readln();
     End;

如果有任何负面元素,我希望输出为真,如果没有,我希望输出为假。

标签: pascal

解决方案


我不是Pascal专家,但我认为您正在寻找这样的东西:

program Hello;
var 
arrayWithNegatives : array[1..10] of integer = (-1,20,30,40,50,60,71,80,90,91);
arrayWithPositives : array[1..10] of integer = (0,20,30,40,50,60,71,80,90,91);
emptyArray : array of integer;

Function HasNegativeNumbers(a: array of integer; n:integer):boolean;
Begin
    if n < 0 then HasNegativeNumbers := False
    else if a[n] < 0 then HasNegativeNumbers := True
    else HasNegativeNumbers := HasNegativeNumbers(a, n - 1);
End;


begin
  writeln (HasNegativeNumbers(arrayWithNegatives, length(arrayWithNegatives) - 1));
  writeln (HasNegativeNumbers(arrayWithPositives, length(arrayWithPositives) - 1));
  writeln (HasNegativeNumbers(emptyArray, length(emptyArray) - 1))
end.

推荐阅读