Elsesearch(x,mid+l,r);
End
elseWriteln(x:
5,*no');
End;
Begin
WritelnCinpnutgeshu');
Fork:
=ltondoread(a[k]);
Read(x);
F:
=l;r:
=n;
Search(x,f,r):
End.
2.Hanoi塔问题。
递归:
procedureHanoi(n:
integer:
x,y,z:
char);
Begin
Ifn二1thenwriteln(x,n-,--',z)
Elsebegin
Hanoi(n-2,x,z,y):
Writeln(x,',z;)Hanoi(n-
l,y.x.z)
End;
End;
Begin
Write(inpunt:
');
Read(n);
Hanoi(n,A,'B',C)
End.
3.有n个硬币(n为偶数)正面朝上排成一排,每次将nd个硬币翻成朝上为止。
编程让计算机把翻硬币的最简过程及翻币次数打印出来(用*代表正面,用0代表反面)。
基本形式:
D[l]二0;d[2]二1
递归式:
d[n]=(n-l)*(d[n-l]+d[n-2])varn:
integer;
functiond(n:
integer):
longint;
begin
casenof
l:
d:
=0;
2:
d:
=l;
elsed:
=(n-l)*(d(n-l)+d(n-2));
end;
end;
begin
「epeat
write('n二');
readln(n);
ifnv=0thenwnteInCOncemorer)
untiln>0;
writeln('d=',d(n));
readIn;
end.
个月后共有多少对兔子?
递归的
4.有一对雌雄兔子,假定两个月便可以繁殖雌雄各—对兔子。
要素:
个月Programrabbit;
递归的形式:
T[n]=T[n-1]+T[n-2]基本:
T[l]=l,T[2]二1结束条件:
nvarn:
integer;
functionfa(n:
integeij:
integer;
begin
ifn<3thenfa:
=l
elsefa:
=fa(n-l)+fa(n-2);
end;
begin
write('n二');readln(n);
writeln('Thenumberoftherabbits:
',fa(n));end.
个程序,计算共有多少种不同的走
5.梯有N阶,上楼可以一步上一价,也可以一次上二阶。
编
法。
递归的形式•s[n]=s[n-l]+s[n-2]
基本式子:
s[l]=l;s[2]=2programupstairs;
varn:
integer;
functions(n:
integer):
longint;
begin
if(n二l)o「(n二2)thens:
二n
elses:
=s(n-l)+s(n-2);
end;
begin
repeatwrite('N='):
readln(n);untiln>0;writeln('s二:
s(n));readIn;
end.
6.斐波那切数列
递归:
varm,p:
integer;
Functionfib(n:
integer):
integer:
Begin
Ifn=0thenfib:
=O
Elseifn二1thenfib:
二1
Elsefib:
=fib(n-l)+fib(n-2);
End;
Begin
Read(m);
P:
二fib(iTi);
Writeln(■fib(',mm')=',p)
End.
7.设有2An个运动员要进行网球比赛。
现要设计—个满足以下要求的比赛日程表:
(2)、每个选手必须与其他个选手各赛一次;
(2)、每个选手每天只能参赛一次;
(3)、循环赛在n-2天内结束。
Programmatch;constk=3;n=8;
var
s:
array[l..n,l..n]ofinteger;i,j,p:
integer;
ju:
boolean;
procedurecopyl(be,en:
integer;jug:
boolean;q:
integer);
varm,t,ban:
integer;
begin
ifjugthen
begin
ifbe=lthen
beginifs[en,en]=0then
begincopyl(be,endiv2,true,qdiv2);
copy2((endiv2)+l,enJalse,qdiv2);
end;
form:
=ltoendo
fort:
=ltoendo
s[m+q,t+q]:
=s[m,t]end
elsebeginifs[be+q-l,q]=0then
begincopyl(be,be+(qdiv2)-1,true,qdiv2);
copyl(be+(qdiv2),en,false,qdiv2)
end;
form:
二betoendofort:
=ltoqdos[m+q,t+q]:
=s[m,t]endendelsebeginifs[be,q]=0then
begincopyl(be,be+(qdiv2)-1,true,qdiv2);
copyl(be+(qdiv2),en,false,qdiv2)end;
form:
二betoendo
fort:
=ltoqdos[m-q,t+q]:
=s[m,t]end
end;
begin
p:
=8;
fori:
=ltondo
forj:
=ltondo
s[i,j]:
二0;
fori:
=ltondo
begins[i,l]:
=i;ifodd(i)thens[i+l,2]:
=s[i,l]elses[i-l,2]:
=s[i,l]:
end;
copyl(l,ndiv2,true,pdiv2);copyl((ndiv
2)+1,n,false,pdiv2);
fori:
=ltondo
begin
forj:
=ltondowrite(s[ij],'');
writein;
end;
end.
以下是USACOcontest±的题目,全是递归
BRONZEPROBLEMS
Problem11:
谷仓的安保[Traditional,2005]FarmerJohn给谷仓安装了一
人奶牛安排
每
(3V二LV二15)
人新的安全系统,并且要给牛群
个有效的密码。
一个有效的密码由L
个小写字母(来自传统的拉丁字母
集’al.N)组成,至少有U),至少两个辅音有按字母表顺序出现的字母(例如abc'是有效的,而'bac'不是)给定一个期望长度L和C
人程序,打印出所有的长度为L、
个元音Ca\O,T,0,或者
),并且
(除去元音以外的音节
个小写字母,
能由这些字母组
与
成的有效密码。
密码必须按字母表顺序打印出来,人
O
行
题目名称:
passwd输入格式:
*第一行:
两
个由空格分开的整数,L和C*第二行:
C
个空格分开的小写字母,密码是由这个字母集中的字母来构建的。
输入样例(文件passwd.in):
46atCiSW输入详细说明:
由从给定的六个择的、长度为4的密码。
输出格式:
*第一至?
行:
每
字母中选
个输出行包括
个字符的密码(没有空格)。
输出行必须按照字母顺序排列。
输出样例(文件passwd.out):
acis
acitaciwacstacswactwaistaiswaitwastwcist
ciswcitwistw
Problem12:
”跳房子“[HalBurch,2005]奶牛们按不太传统的方式玩起了小孩子们玩的跳房子“游戏。
奶造了
—人
们创
5x5的、由与x,y轴平行的数字组成的直线型网格,而不是用来在里面跳的、线性排列的、带数字的的数字中跳:
方格。
然后他们熟练地在网格中
/、/
向刖
旬左跳
(从不斜过来跳),跳到网格中的另
个数字上。
他
,门再这样跳啊跳(按相同规则),跳到另外字)O
—共在网格内跳过五次后,他们的跳跃构建了位整数(可能以0开头,
例如000201)O求出所有能被这样创造出来的不同整数的总数。
问题名称:
numgrid
输入格式:
第1到5行:
这样的网格,一行5个整数输入样例(文件numgrid.in):
11111
11111
11111
11121
11111
输出格式:
*第1行:
能构建的不同整数的总数
输出样例(文件numgrid.out):
15
输出详细说明:
111111,111112,111121,111211,111212,112111,1
12121,121111,121112,121211,121212,211111,211121,212111和212121能够被构建。
没有其它可冃巾数了。
Problem13:
卫星照片[RobKolstad,2005]
FarmerJohn给他的农场买了WxH像素的卫星照片(1V二WV二80,1V二H
<=1000),希望找出最大的“连续的“像素如果能椎八像素相连,这样的牧场称作是连续的(这句话太难翻了,大家将就着理解一下,看了后面的范例应该不会影响做题一译者)。
(很容易创建形状稀奇古怪的牧场,甚至是围着其它圆圈。
)每一张照片都数字化的抽象了,牧场,非牧场区显示为O
的卫星照片样例:
牧场。
任何一对像素,-的与属于这个牧场的另
员
X显示为
(互相连接的「向的或纵向
面是一人
10x5
这张照片显示了大小分别为4、16、6个像素的连续牧场区。
帮助FJ在他的每张卫星照片中找到最大的连续牧场。
问题名称:
satpix输入格式:
个由空格分开的整数,H和W。
*第1行:
两*第2到H+1行:
每一行包含W个V或者…,代表卫星照片的横向行。
输出样例(文件satpix.in):
105
输出格式:
*第1行:
最大连续牧场的大小输出样例(文"
satpix.out):
16