递归基础练习题Word文档下载推荐.docx

上传人:b****8 文档编号:22734142 上传时间:2023-02-05 格式:DOCX 页数:15 大小:20.54KB
下载 相关 举报
递归基础练习题Word文档下载推荐.docx_第1页
第1页 / 共15页
递归基础练习题Word文档下载推荐.docx_第2页
第2页 / 共15页
递归基础练习题Word文档下载推荐.docx_第3页
第3页 / 共15页
递归基础练习题Word文档下载推荐.docx_第4页
第4页 / 共15页
递归基础练习题Word文档下载推荐.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

递归基础练习题Word文档下载推荐.docx

《递归基础练习题Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《递归基础练习题Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。

递归基础练习题Word文档下载推荐.docx

10 

16 

STEP=16

13. 

将十进制转换为二进制。

14. 

计算M=max(a,b,c)/[max(a+b,b,c)*max(a,b,b+c)],其中a,b,c由键盘输入。

16. 

某人写了n封信和n个信封,如果所有的信都装错了信封。

求所有的信都装错信封共有多少种不同情况?

17. 

给出一棵二叉树的中序与后序排列。

求出它的先序排列。

18. 

求把一个整数n无序划分成k份互不相同的正整数之和的方法总数。

19. 

已知一个一维数组A[1..N]。

{N<

50} 

又已知一整数M。

如能使数组A中任意几个元素之和等于M,则输出YES,反之则为NO。

20. 

要求找出具有下列性质的数的个数(包含输入的自然数n):

先输入一个自然数n(n<

=500),然后对此自然数按照如下方法进行处理:

①. 

不作任何处理;

②. 

在它的左边加上一个自然数,但该自然数不能超过原数首位数字的一半;

③. 

加上数后,继续按此规则进行处理,直到不能再加自然数为止.

样例:

输入:

6

满足条件的数为 

16

26

126

36

136

输出:

21. 

自然数的拆分问题。

给定自然数n,将其拆分成若干自然数的和。

输出所有解,每组解中数字按从小到大排列。

相同数字的不同排列算一组解。

3=1+1+1

3=1+2

3=3

22. 

用递归的方法求N个数中最大的数及其位置。

23. 

写出折半查找的递归算法。

24. 

快速排序法。

思考题 

:

1、数学宝塔,从最顶上走到最底层,每次只能走到下一层的左边或右边的数字,求出使所走到的所有数字之和为60的途径。

        7

       4  6

      6  9  3

     6  3  7  1

    2  5  3  2  8

   5  9  4  7   

3  2

  6  4  1  8  5  6  3

 3  9  7  6  8  4  1  5

2  5  7  3  5  7  8  4  2

2、 

汉诺塔问题:

设有三个塔座,依次命名为x,y,z。

有z个直径不同的圆盘,由小到大依次编号为1、2、……,n。

开始时,它们全部按递减的次序插在塔座上。

现要求按下列规则把n个圆盘按次序插放在z塔座上。

(1)、每次只能移动一个圆盘;

(2)、圆盘可以从任一个塔座上移到另一个塔座上;

(3)、任何时刻都不能把一个较大的圆盘压在较小的圆盘上。

典型例题:

1.设有n个数已经按从大到小的顺序排列,现在从键盘上输入n,判断它是否在这n 

个数中,如果存在则输出“yes”否则输出“no”。

Program 

lx4;

Const 

n=30;

Var 

a:

array[1..n]of 

integer;

F,r,x,k:

search(x,top,bot:

integer);

mid:

Begin

if 

top<

=bot 

then

Mid=(top 

bot) 

div 

2;

If 

=a[mid] 

then 

writeln(x:

5,mid:

5,’yes’)

else 

x<

a[mid] 

search(x,top,mid-1)

Else 

search(x,mid+1,r);

End

Writeln(x:

5,‘no’);

End;

Begin 

Writeln(‘input 

ge 

shu’);

For 

k:

=1 

to 

do 

read(a[k]);

Read(x);

F:

=1;

r:

=n;

Search(x,f,r);

End.

2.hanoi塔问题。

递归:

procedure 

Hanoi(n:

x,y,z:

char);

n=1 

writeln(x,’--’n,’---’,z)

begin

Hanoi(n-1,x,z,y);

Writeln(x,’--’,n,’---’,z);

Hanoi(n-1,y,x,z)

Write(‘input 

n:

’);

Read(n);

Hanoi(n,’A’,’B’,’C’)

3.有n个硬币(n为偶数)正面朝上排成一排,每次将n-1个硬币翻成朝上为止。

编程让计算机把翻硬币的最简过程及翻币次数打印出来(用*代表正面,用0代表反面)。

基本形式:

D[1]=0;

d[2]=1

递归式:

d[n]= 

(n-1)*( 

d[n-1] 

d[n-2])

var 

 function 

d(n:

integer):

longint;

  begin

   case 

of

    1:

d:

=0;

    2:

   else 

=(n-1)*(d(n-1)+d(n-2));

   end;

  end;

 begin

  repeat

   write('

n='

);

   readln(n);

   if 

n<

=0 

writeln('

Once 

more!

'

  until 

n>

0;

   writeln('

d='

d(n));

   readln;

 end.

4.有一对雌雄兔子,假定两个月便可以繁殖雌雄各一对兔子。

问n个月后共有多少对兔子?

递归的三要素:

递归的形式:

T[n]= 

T[n-1]+ 

T[n-2]

基本:

T[1]=1,T[2]=1

结束条件:

n个月

program 

rabbit;

 var 

fa(n:

fa:

=1

    else 

=fa(n-1)+fa(n-2);

readln(n);

The 

number 

of 

the 

rabbits:

fa(n));

  end.

5.梯有N阶,上楼可以一步上一价,也可以一次上二阶。

s[n]=s[n-1]+s[n-2]

基本式子:

s[1]=1;

s[2]=2

upstairs;

s(n:

(n=1)or(n=2) 

s:

=n

     else 

=s(n-1)+s(n-2);

   repeat

N='

   until 

s='

s(n));

6.斐波那切数列

m,p:

Function 

fib(n:

n=0 

fib:

=0

=fib(n-1)+fib(n-2);

Read(m);

P:

=fib(m);

Writeln(‘fib(’,mm’)=’,p)

7.设有2^n个运动员要进行网球比赛。

现要设计一个满足以下要求的比赛日程表:

(1)、每个选手必须与其他n-1个选手各赛一次;

(2)、每个选手每天只能参赛一次;

(3)、循环赛在n-1天内结束。

match;

 const 

k=3;

n=8;

 var

  s:

array[1..n,1..n] 

  i,j,p:

  ju:

boolean;

 procedure 

copy1(be,en:

jug:

q:

  var 

m,t,ban:

jug 

    begin

     if 

be=1 

      begin 

s[en,en]=0 

         begin 

copy1(be,en 

2,true,q 

2);

          copy1((en 

2)+1,en,false,q 

         end;

       for 

m:

en 

do

        for 

t:

         s[m+q,t+q]:

=s[m,t]

      end

begin 

s[be+q-1,q]=0 

          begin 

copy1(be,be+(q 

2)-1,true,q 

           copy1(be+(q 

2),en,false,q 

2)

          end;

         for 

=be 

          for 

           s[m+q,t+q]:

       end

     end

      if 

s[be,q]=0 

       copy1(be+(q 

      end;

      for 

        s[m-q,t+q]:

 p:

=8;

 for 

i:

  for 

j:

   s[i,j]:

   begin

    s[i,1]:

=i;

    if 

odd(i) 

s[i+1,2]:

=s[i,1]

s[i-1,2]:

=s[i,1];

  copy1(1,n 

2,true,p 

  copy1((n 

2)+1,n,false,p 

    for 

     write(s[i,j],'

    writeln;

end.

以下是USACO 

contest上的题目,全是递归

-----------------------------------------------

**********************************************************************

BRONZE 

PROBLEMS

三道题目,从11到13

Problem 

11:

谷仓的安保 

[Traditional, 

2005]

Farmer 

John给谷仓安装了一个新的安全系统,并且要给牛群中的每一个奶牛安排一个有效的密码。

一个有效的密码由L(3 

<

15)个小写字母(来自传统的拉丁字母集'

a'

...'

z'

)组成,至少有一个元音('

 

e'

i'

o'

或者 

u'

),至少两个辅音(除去元音以外的音节),并且有按字母表顺序出现的字母(例如,'

abc'

是有效的,而'

bac'

不是) 

给定一个期望长度L和C个小写字母,写一个程序,打印出所有的长度为L、能由这些字母组成的有效密码。

密码必须按字母表顺序打印出来,一行一个。

题目名称:

passwd

输入格式:

第一行:

两个由空格分开的整数,L和C

第二行:

C个空格分开的小写字母,密码是由这个字母集中的字母来构建的。

输入样例 

(文件 

passwd.in):

w

输入详细说明:

由从给定的六个字母中选择的、长度为4的密码。

输出格式:

第一至?

行:

每一个输出行包括一个长度为L个字符的密码(没有空格)。

输出行必须按照字母顺序排列。

输出样例 

passwd.out):

acis

acit

aciw

acst

acsw

actw

aist

aisw

aitw

astw

cist

cisw

citw

istw

12:

"

跳房子"

[Hal 

Burch, 

奶牛们按不太传统的方式玩起了小孩子们玩的"

游戏。

奶牛们创造了

一个5x5的、由与x,y轴平行的数字组成的直线型网格,而不是用来在里面跳

的、线性排列的、带数字的方格。

然后他们熟练地在网格中的数字中跳:

向前跳、向后跳、向左跳、向右跳

(从不斜过来跳),跳到网格中的另一个数字上。

他们再这样跳啊跳(按相同规

则),跳到另外一个数字上(可能是已经跳过的数字)。

一共在网格内跳过五次后,他们的跳跃构建了一个六位整数(可能以0开头,

例如000201)。

求出所有能被这样创造出来的不同整数的总数。

问题名称:

numgrid

第1到5行:

这样的网格,一行5个整数

numgrid.in):

第1行:

能构建的不同整数的总数

numgrid.out):

15

输出详细说明:

111111, 

111112, 

111121, 

111211, 

111212, 

112111, 

112121, 

121111, 

121112,121211, 

121212, 

211111, 

211121, 

212111和 

212121 

能够被构建。

没有其它可能的数了。

13:

卫星照片 

[Rob 

Kolstad, 

John给他的农场买了W 

H像素的卫星照片(1 

80, 

H

1000),希望找出最大的"

连续的"

(互相连接的)牧场。

任何一对像素,一个

像素如果能横向的或纵向的与属于这个牧场的另一个像素相连,这样的牧场称

作是连续的(这句话太难翻了,大家将就着理解一下,看了后面的范例应该不

会影响做题—译者)。

(很容易创建形状稀奇古怪的牧场,甚至是围着其它圆圈

的圆圈。

每一张照片都数字化的抽象了,牧场区显示为"

*"

非牧场区显示为"

."

下面

是一个10 

5的卫星照片样例:

..*.....**

.**..*****

.*...*....

..****.***

这张照片显示了大小分别为4、16、6个像素的连续牧场区。

帮助FJ在他的每张

卫星照片中找到最大的连续牧场。

satpix

两个由空格分开的整数,H 

和 

W。

第2到H+1行:

每一行包含W个"

或者"

,代表卫星照片的横向行。

satpix.in):

5

最大连续牧场的大小

satpix.out):

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1