读书人

简单的递归函数解决方法

发布时间: 2012-02-13 17:20:26 作者: rapoo

简单的递归函数

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才是。
麻烦各位了。就这点分了

[解决办法]
你这个函数没有默认的返回值(即else后应该要result)

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

但第1次调用时b>1,亦即是没有指定返回值,所以是任意的送一个integer值给你
[解决办法]
探讨
这个函数实质就像这样

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

读书人网 >.NET

热点推荐