noip讲义5-递归法(小学程度).ppt 36页

  • 30
  • 0
  • 0
  • 2017-06-26 发布
文档工具:
    1. 1、本文档共36页,可阅读全部内容。
    2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
    3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
    4. 文档侵权举报电话:19940600175。
    noip讲义5-递归法(小学程度)

    递归过程 当一个问题可以不断的通过一种有规律的增加或递减转化为一个新问题,而解决新问题的方法和原问题相同时,可以考虑过程的递归调用,注意这种“不断的增加或递减”是有尽头的。 递归过程分析—数字倒序 例5、由m个A,n个B组成若干个排列。从某个排列的位置1开始数,数到任意位置时都能保证A的个数不少于B的个数,则称该排列为合理排列。 例如:当m=2,n=2时排列有 AABB(合理)ABAB(合理) ABBA(不合理) BBAA(不合理) 合理排列数有2种 输入:只有一行两个整数m,n(1≤n≤m≤12) (用空格分隔) 输出:一个整数(所有的合理排列数) 【样例】 输入 输出 3 2 5 分析:模拟排队的情况,从第1个人开始,第1 人只能是A,第2个可以是A也可以是B,再其后的人要保证任意位置时都能保证A的个数不少于B的个数,递归求有多少个排列。 Var m,n,t:LongInt; Procedure pd(i,j:LongInt); Begin If (i=m) And (j=nThen t:=t+1{已生成一种排列} Else Begin If i<m Then pd(i+1,j);{增加1个A} If (j<n) And (j<i) Then pd(i,j+1); End; {增加1个B} End; Begin t:=0; Read(m,n);pd(1,0);Writeln(t); End. var n:integer; procedure hanoi(n:integer;x,y,z:char); begin  if n=1 then writeln(x, ‘->’,n, ‘->’,z)  else begin    hanoi(n-1,x,z,y);    writeln(x, ‘->’,n, ‘->’,z);    hanoi(n-1,y,x,z) end end; begin    {主程序) readln(n); hanoi(n,‘A’,‘B’,‘C’) end. var i,n,k:integer; a:array[1..10] of integer; count:longint; procedure perm(k:integer); var j,p,t:integer; begin if( )then begin ( ); for p:=1 to k do write(a[p]:1); write(' '); if( )then writeln; exit; end; for j:=k to n do begin t:=a[k]; a[k]:=a[j]; a[j]:=t; perm(k+1) ; t:=a[k];( ) end end; begin writeln('Entry n:'); read(n); count:=0; for i:=1 to n do a[i]:=i; ( ) end. perm(1) K=n inc(count) count mod 5=0 a[k]:=a[j]; a[j]:=t ; 123 123 123 132 123 132 213 213 213 231 231 321 321 321 312 312 例3、2的幂次方表示(98年复赛) 任何一个正整数都可以用2的幂次方表示。 例如:137=27+23+20 同时约定次方用括号来表示,即ab可表示为a (b)。 由此可知,137可表示为:2 (7)+2 (3)+2 (0) 进一步:7=22+2+20 (21用2表示) 3=2+20 所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0) 又如:1315=210+28+25+2+20 所以1315最后可表示为: 2(2(2+2(0))+2)+2(2(2+2(0)))+

    文档评论(0)

    • 内容提供方:yaocen
    • 审核时间:2017-06-26
    • 审核编号:5220211024001033

    相关文档

    相关课程推荐