什么时候该用到递归

什么时候该用到递归,第1张

树用递归方便,用其它方法好像跟本不可能.

递归用在特定的函数如 f(x)= f(x-1) + 2

像这种情况,你想算出f(x)就必需算出f(x-1),而f(x)和f(x-1)实际上都是用共一个方法,只是参数相差一.这种时候用递归就很快.

这个题做法大概是这样:

这个人传球通常是向左或向右传,于是采用递归算法:

定义球的位置为i,剩余次数为j,

每次都会向左或向右传,i从1开始向左向右传:

因为是一个圈,所以当i=1,向左时,i:=n;

而i向右时,i:=i+1;

同理继续开辟内存空间,这个函数可以这样表达:

f(i,j)=情况一:if j>0 and i=1 then f:=f(n,j-1)+f(2,j-1);

情况二:if j>0 and i=n then f:=f(n-1,j-1)+f(1,j-1);

情况三:if j>0 and (i<>1 and i<>n) then f(i,j):=f(i-1,j-1)+f(i+1,j-1);

情况四:if j=0 then if i=1 then f=1 else f=0;

主干就是这些,下面给出他的源程序(这是我的一个想法,不是标准程序)

program ball;

var m,n:integer;

function f(i:integer,j:integer):longint;//递归子程序//

begin

if (j>0) and (i=1) then f:=f(n,j-1)+f(2,j-1);

if (j>0) and (i=n) then f:=f(n-1,j-1)+f(1,j-1);

if (j>0) and (i<>1) and (i<>n) then f:=f(i-1,j-1)+f(i+1,j-1);

if (j=0) then if i=1 then f:=1 else f:=0;

end;

begin

readln(n,m);

writeln(f(1,m));

end//这个程序过不了几个测试点,算法不好//

这个其实应该有解题报告了,那上面的程序要好很多

以上就是关于什么时候该用到递归全部的内容,包括:什么时候该用到递归、pascal问题求教啊!!救命!、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10026712.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存