Pascal,函数返回错误值

问题描述 投票:0回答:1

我似乎对 Pascal 中的函数有问题。该程序只是一个普通的递归binsearch,但它总是返回值4?有人能指出解决方案中的错误吗?

var i: integer;
const n = 10;
type tablice = array[1..n] of integer;

function Binsearch(const tab:tablice;l:integer;p:integer;x:integer):integer;
var s: integer;
begin
  if l=p then 
  begin
    if tab[l]=x then 
      Binsearch:=p
    else 
      Binsearch:=-1;
    end
    else 
    begin
      s:=(l+p) div 2;
      if tab[s]<x then 
        l:=s+1
      else 
        p:=s;
      Binsearch(tab,l,p,x);
    end;
end;

var A:tablice;
    x:integer;


begin
  for i:=1 to n do A[i]:=i;

  x:=30;
  writeln(Binsearch(A,1,n,x));
  readln;

end.

另一方面,C++ 中的相同代码可以正常工作:

using namespace std;

int rekursja(int tab[], int l, int p, int x){
    if(l==p){
        if(tab[l]==x) return l;
        else return -1;
    }else{
        int s=(l+p)/2;
        if(tab[s]<x) l=s+1;
        else p=s;
        rekursja(tab,l,p,x);
    }
}

int main(){
    int t[] = {1,2,3,4,5,6,7,8,9,11};
    cout << rekursja(t,0,9,11);
}
pascal freepascal
1个回答
1
投票

Binsearch 仅返回最后一次调用的结果(本例中 result := -1)。在其他情况下,不会分配结果,因此会显示随机值。

将递归调用更改为

Binsearch:=Binsearch(tab,l,p,x);

这样它就会返回之前所有调用的结果。

© www.soinside.com 2019 - 2024. All rights reserved.