我似乎在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);
}
答案 0 :(得分:1)
Binsearch返回仅从最后一次调用退出的结果(在这种情况下结果:= -1)。在其他情况下,没有分配结果,因此显示随机值。
使用
更改有趣的通话Binsearch:=Binsearch(tab,l,p,x);
通过这种方式,它将结果返回给所有previos调用。