+ -
当前位置:首页 → 问答吧 → 简单的递归函数

简单的递归函数

时间:2011-11-15

来源:互联网

Delphi(Pascal) code

function   a(b:integer):integer;
begin
    if   b <=1   then  
        result:=1
    else
        a(b-1);
end; 

Delphi(Pascal)
这段代码按道理说应该返回值是1.但为什么返回值是乱七八糟的数字呢。我跟踪了下
发现当程序执行完后会跳到end;处。在这下断。
他会执行5次。我调用的时候是 a(5) 如果我改成a(3) ,
那么他在end;处会执行3次。
执行的3次是我按F8。他会一直在end;那。3次过后函数才真正结束了。
我搞不懂。result:=1是最后执行的。按道理他的返回值应该1才是。
麻烦各位了。就这点分了

作者: wozhaozhe2008   发布时间: 2011-11-15

你这个函数没有默认的返回值(即else后应该要result)

递归结束时,最后一次执行的end就是第1次调用的,所以返回的值永远是第1次调用时的值

但第1次调用时b>1,亦即是没有指定返回值,所以是任意的送一个integer值给你

作者: kaikai_kk   发布时间: 2011-11-16

这个函数实质就像这样

function a(b:integer):integer;
begin
  if b <=1 then  
  result:=1;
end;

作者: kaikai_kk   发布时间: 2011-11-16