讨论 / 为什么这程序是能解题的?
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呢?

求教啊/////这是我一半的积分了

#1 zlk879006461@2012-08-23 03:40:00
回复 删除
晕啊

你这是函数嵌套!一个接着一个!

#2 王昱炜@2012-08-23 04:03:00
回复 删除
这是你一半的积分了……

#3 初学者123@2012-08-27 05:21:00
回复 删除
这是函数的递归调用,对于不同的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)肯定就卡了。。。

查看更多回复
提交回复