Pascal,函数返回错误的值

时间:2013-12-28 17:50:46

标签: pascal freepascal

我似乎在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);
}

1 个答案:

答案 0 :(得分:1)

Binsearch返回仅从最后一次调用退出的结果(在这种情况下结果:= -1)。在其他情况下,没有分配结果,因此显示随机值。

使用

更改有趣的通话
Binsearch:=Binsearch(tab,l,p,x);

通过这种方式,它将结果返回给所有previos调用。