fanzhirui 2012-08-27 05:21:00
点我顶贴
收藏
删除
植树节有五位同学参加活动,他们完成植树的棵树各不相同,第一位同学说他比第二位多值2棵,第二位同学说他比第三位多值2棵,……一直问到第五位同学时它说他自己值了10棵。问第一位同学到底值了多少棵树?(编写函数解决问题)。
function s(a:longint):longint;
begin
if a=5 then s:=10
else s:=s(a+1)+2;
end;
begin
write(s(1));
end.
按递归问题的函数再循环,当a=5的话s又变回10了,那么s:=s(a+1)+2;中a+1一直加到5,那么s不就变回10,紧接着就跳出函数,那输出为什么是18呢?
求教啊/////这是我一半的积分了
#3 初学者123@2012-08-27 05:21:00
27435
回复
删除
这是函数的递归调用,对于不同的n,你可以理解为,s(n)有个单独的值,而且在这里s(n)=s(n+1)+2(n<5)。
s(5)=10,则s(4)=s(5)+2=12;s(3)=s(4)+2=14;s(2)=s(3)+2=16;s(1)=s(2)+2=18.
所以s(1)的值就是18了~
说实话,这样写很危险。。。对于单独的这个问题可以这么写,但是使用递归的时候,边界条件最好让每个n都能终止,比如这里输出s(6)肯定就卡了。。。