利用递归思想解决计数问题
递归算法例子

递归算法例子1. 哎呀,你知道计算阶乘吧!比如说 5 的阶乘就是5×4×3×2×1,这用递归算法就很合适呀!就像你一层一层地剥开洋葱一样,先计算 5 的阶乘,它又调用 4 的阶乘,一直这样递归下去,直到计算到 1 的阶乘!是不是很神奇啊?2. 嘿,你想想画一棵树,从树干开始不断长出树枝,这和递归算法多像呀!比如计算树的节点数量,一个节点会有子节点,然后子节点又有它的子节点,这就是在不断地递归呀!就像不停地探索未知一样,有趣吧?3. 哇哦,斐波那契数列知道吧!1,1,2,3,5,8 这样的,它用递归算法简直绝了啊!前两个数相加得到后面一个数,每次计算都要依靠前面的结果,这不就是递归在发挥神奇作用嘛!你说棒不棒?4. 嘿呀,拼图游戏玩过吧!当你一片片去组合的时候,其实也有点像递归算法呢!从局部到整体,一点点拼凑起来,这和递归的层层递进不是很像吗?比如要找出完整图案,就需要不断递归探索各个部分呀!5. 呐,汉诺塔游戏了解一下呀!要把盘子从一个柱子移到另一个柱子,这过程中就是递归在帮忙呢!每一步的移动都像是在打开一个新的递归之门,让整个过程充满挑战和乐趣,你难道不想试试吗?6. 哦哟,走迷宫的时候是不是感觉很奇妙?递归算法在这当中也能大显身手哦!比如找到走出迷宫的路径,就是不断尝试,不断递归,就像在黑暗中寻找光明一样刺激,不是吗?7. 嘿,文件系统的目录结构见过吧!从根目录到子目录,再到更下一级的目录,这多像递归呀!就像不断深入一个神秘的世界,每一次递归都是一次新的发现,是不是很有意思呢?8. 哇,你想想搜索一个大的数据集,用递归算法来查找特定的元素,那感觉就像是大海捞针,但又充满希望!每一次递归都是一次新的尝试,就像在茫茫人海中寻找那个特别的人一样,会带来惊喜哦!9. 总之呢,递归算法真的是无处不在,非常神奇!它能让复杂的问题变得简单有趣,能让我们看到问题的本质和内在联系。
递归函数的应用与注意事项

递归函数的应用与注意事项递归函数是一种非常重要且常用的编程技巧,它在解决一些问题时能够提供简洁、高效的解决方案。
然而,递归函数的使用也需要注意一些细节和注意事项,以确保程序的正确性和性能。
本文将探讨递归函数的应用场景以及在使用递归函数时需要注意的事项。
一、递归函数的应用场景1. 数学问题求解:递归函数在解决数学问题中非常常见。
例如,计算斐波那契数列的第n项,可以使用递归函数来实现。
递归函数可以将复杂的问题简化为相同类型的子问题,从而提高代码的可读性和可维护性。
2. 数据结构操作:递归函数在处理数据结构时也非常有用。
例如,在二叉树的遍历中,可以使用递归函数来实现前序、中序和后序遍历。
递归函数可以帮助我们逐层遍历树的节点,从而实现对树的各种操作。
3. 字符串处理:递归函数在字符串处理中也有广泛的应用。
例如,判断一个字符串是否是回文串,可以使用递归函数来逐个比较字符串的首尾字符。
递归函数可以帮助我们简化字符串处理的逻辑,提高代码的可读性。
二、注意事项1. 递归终止条件:递归函数必须有一个明确的终止条件,否则会陷入无限递归的循环中。
在编写递归函数时,要确保终止条件能够正确判断递归的结束,避免出现死循环。
2. 递归调用的层数:递归函数的调用层数不能太多,否则会导致栈溢出的问题。
每次递归调用都会占用一部分栈空间,当递归层数过多时,栈空间可能会耗尽。
因此,在使用递归函数时,要注意对递归调用层数的控制。
3. 递归函数的性能:递归函数在某些情况下可能会导致性能问题。
递归函数的调用过程中会频繁地进行函数调用和返回,这会增加函数调用的开销。
在某些情况下,可以考虑使用迭代或其他方法来替代递归函数,以提高程序的性能。
4. 递归函数的参数传递:在使用递归函数时,要注意参数的传递方式。
递归函数的参数传递可以通过值传递或引用传递来实现。
在某些情况下,如果参数传递不当,可能会导致递归函数的行为不符合预期,因此要注意参数传递的方式。
用递归解决出栈序列计数和输出问题

伊 犁师 范学院 学报 (自然科 学版 )
2 0 1 5 ‘ 年
3 栈 的计数
3 . 1 栈大 小不 受 限制
在 栈 大小 不受 限制情 况下 ,关于 出栈序 列 的计 数 问题 , 目前 主要 是通 过一 一对 应 的方 法将 计数 问 题 归 结 为 Ca t a l a n 数 的 计 数 问 题 , 其 结 果 为
的计 数 和输 出 问题 .
序列 长度 时 , 出栈 序列 首先 需要 满 足性 质 1 ,然
后考 虑栈 大 小受 限对 出栈 序 列 的要求 .例 如 ,有 长
度 n=6的入栈 序列 1 2 3 4 5 6 ,栈 的大 小 k=4,此 时 出栈 序列 的第 一位 不 能超 过 元素 4 , 即出栈 序列 第
中图分 类 号 :T P 3 1 1 文献 标识 码 :A 文章 编号 : 1 6 7 3 -9 9 9 X( 2 0 1 5 )O 1 —0 0 6 7 —0 4
当栈大 小不 受 限制 时 ,依据 栈 的特 点 ,较 容 易
1 引 言
栈 是 限 定 仅 在 表 尾 端 进 行 插 入 或 删 除操 作 的
Ma r . 2 O1 5
V o 1 . 9 No . 1
用 递 归解 决 出栈序 列计 数和 输 出 问题
王 文 龙
( 喀 什 师 范 学 院 信 息 工 程技 术 系 ,新 疆 喀 什 8 4 4 0 0 0)
摘 要:在栈大小不受限制和栈 大小受限制两种情况下,分析在给定入栈序列 ( 1 2… n ) 的情况下,出栈序列应满足的性质 ,并据此给 出基于递归的 出 栈序列计数和输 出的算法及程序 实 现. 算 法较 直观 ,易于理 解. 关键词 :栈 ;出栈序列;降序 ;递归;算法 ;程序
递归计数的六种方式

中等数学i叙含活劫係歿鉼雇丨递归计数的六种方式中图分类号:〇141.3冯跃峰(广东省深圳市福田区,518038)文献标识码:A文章编号:1005 - 6416(2020)08 - 0002 -10(本讲适合高中)计数是组合中的常见问题,而递归计数 则是其常用方法.所谓递归,就是建立“,的问题与“小于 ,的若干同构子问题之间的等量关系.本文 举例介绍六种数学竞赛中常用的递归方式.1增减元递归在n的情况中减少或增加一个元素,转 化为n_l(或.1+ 1)的情况.一般采用减首项(排在最前的元素或步骤)的方式建立递归:先考虑首项的取值,再 将后面若干项捆绑,看作〃-1的情况处理.但若n的问题必须先完成n- 1的问题 时,则采用减末项递归.例1记[>]表示不超过实数%的最大整数.对给定的正整数〃,计算2k^n-2h3【分析】由代表项C f3"_2A的组合意义想 到构造如下的组合问题:用1、2、3、4可以组 成多少个含有偶数个1的n位数?-方面,设有M 0^彡丨个1.则从n个位置中取2A个位置排1,有C f种方法,剩下的个位置可排2、3、4,均有3种方 法•故含有放个1的W立数的个数为C f3"_-2k注意到,〇彡叫f从而,符合条件的n位数的个数为m= S c f3-2A.k=0另一方面,采用“递归”的方式计算设W立数为,考虑首位a.若首位排1,则后面的n-1位数中只有 奇数个1.由于偶数个1的n - 1位数有a…_, 个,故奇数个1的《- 1位数有个;若首位不排1,则有3种排法,后n - 1位数有偶数个1,有种排法,此时,有 3(^4种排法.故。
… = (4’卜丨-〜,—。
十]。
=4"-' +2^.,.①由式①,知数列- 2^4丨是公比为4 的等比数列.于是,an ~2an-i=4(fln-i -2a n_2)-由此变形得a n ~4a n-l=2(°…-1~4a n-2)=(a2-4a1)2n-2 = (10-4x3)2n'2=-T'\联立式①、②解得a… =2x4n_1 +2n_1②[f]故 S c f3"_2k:2 x4,,_1 +2n_1.t=0收稿日期:2020 - 05 -18当然,解此递归方程还有另外的方法: 式①两端同时除以4"得2020年第8期3a n1,1^a n-lm v,此即常见递归形式心+1可转化为 等比数列求解.2容斥递归为计算《时的计数对象的个数a…,先计 算满足部分条件的“拟对象”个数,再从中 减去不满足余下条件的“坏对象”个数人,有 = 4 _ 人.在计算■/,,时,如果可以转化为原问题在n-1时的计数,则得到Jn =/(〇…-l)-由此建立递归:a… =/… - /(a^)•例2将圆划分为n个扇形,用r种颜色对 扇形染色,每个扇形染一种颜色,且任何两个 相邻的扇形不同色.问:有多少种染色方法?【分析】按圆周排列的n个扇形可记为(皂,…,4),其中4(1矣与4+1相 邻•染色要求4(14心)与禹+1异色,先适 度“放宽”这一要求,再构造“拟染色”:要求 4(1A d1)与卓+1异色,其中可能含有 疋与岑同色的情况,将这种染色去掉即可,它恰好是时情况与原问题同构的染色问题.设有&种满足条件的染色方法.则Xl =ry X2 =r(r- l).对>3 ),扇形岑有r种染色方法,扇形4与次不同色,有r-1种染色方法; ……扇形4与扇形纪―不同色,有r-1种 染色方法.故共有种染色方法.但其中\可能与岑同色,此时,将扇形 \与扇形岑合并看作一个扇形,它恰是n- 1个扇形满足条件的染色方法,有^^种.于是,= r(r-l广1(ra>3).(这要求n-1 >1,否则无法有岑与人同色扇形的捆绑(尽管有A =「,但无递推式 〜+x2 =r(r-l)).故 +a j… =r(r-l)"_1(n^3).)利用“交错加减”可求通项,但需要讨论 ^的奇偶性.下面介绍一种避免讨论n奇偶性的方法.注意到,%2+x3= r(r - 1 )2,①久:3+ 尤4= /*(/*一 1 ) 3,②xn-i +xn=r(r c〇>式〇(1☆•矣n-2)乘以(-1广1得(-1 ) 2尤2+ ( - 1 )2% = r( 1- r)2,(-1)3% + (-i)'\ = K i -O3,+ (-\)n~X xn=r(l-r)各式相加得^2 + (_ 1)"1:K n= (l-r)2-(l-r)n= (r-l)2+ (-l)n+1(r-l)n.又 x2= r(r - 1 ),贝丨J(-1广、…= (r-l)2+ (-l)n + 1(r-l)n-r(r-l),^= (-l)"'1(/--l)2+ (r-l)n+(-l)V(r-l)= (r-l)"+ (-l)n(r-l)(n^3).又;i = 2时,上式也成立.而n = 1时,a=r,故r(r - 1 )" + (r - 1 ) (- 1 )n, n^2;X n~j r,n =1.3分拆递归将计数对象的存在域分解为若干个与原 区域同构的子区域建立递归.例3(欧拉剖分)用对角线将凸n边形 剖分为n-2个三角形,有多少种不同的方法?【分析】用&表示凸A边形的剖分数,且4中等数学规定A = 1.由于多边形的每一条边都必属于一个剖 分三角形,则考虑〃边形岑毛…圮的边岑七所在的剖分三角形,设为A4岑如图1.4于是,的一侧是一个边形的剖分,另一侧是一个n+ l -/c边形的剖分,它 们分别有&、&+1_A种剖分方式.从而,凸n 边形含有剖分三角形△4岑火的剖分数为^k^n + l-k'注意到A可取2,3,…,n- 1.从而,得到递推式+E3En_2+." +En-tE2.①上述方法的核心步骤是:△纪次火将原多边形分割为两个边数较小的多边形,从而 得到与原问题同构的子问题,由此建立递归,称之为“分割递归下面思考:能否得到原多边形的另一种分割方式?利用原多边形的对角线,比如从 A出发的对角线岑4所不同的是,原来分割 所借用的事实是剖分中一定含有A纪A火,而换成对角线小4进行分割时,并不能保证 “剖分中一定含有对角线4火”.因而,要穷 举更多的分割方式.假定凸〃边形岑4…<的剖分中含有从顶点岑出发的对角线.如图2,设该对角线为 /M t(3矣A矣n-1)•则该对角线的一侧是& 边形的剖分,另一侧是n+2- A边形的剖分. 于是,凸〃边形含对角线皂火的剖分方法数为 EkEn+2_k.A,注意到,A:可取3,4,…,7i-l.故凸n边形含从顶点山出发的对角线的剖分数为A h + E4A n_2 +…+ f 3.由对称性,知含从顶点冷(_/= 1,2,…,ra)出发的对角线的剖分数也为五3^-1 +芯人-2 +…+五n-l芯3-于是,凸n边形的所有剖分总数为n(芯3&-1 +五4人-2 + …+U3).以上计算有重复.因为每条对角线有两个顶点,计算了 2次;又凸《边形的剖分含有 n-2个三角形(由多边形内角和可知),于 是,含有《-3条对角线(A:条不相交对角线将多边形分割为A+ 1块),计算了 n-3次.则每个剖分被计数2(« -3) = 2n-6次.t jC K=2n T6(E3K-' +^^-2 +- +f3). ②利用式①、②,可求出心.其中注意:式①、②“隐含”很多相同处.将式①中的n换 成+ 1得^+i =^2^n+^3^-1 + ■"+En.x E3+En E2.再变形为En+i~2En =E3En_l+E4E n_2+--- +En_x Ey代入式②得依次迭代得2E0^n+i = (4n-6) (4n- 10)----—2020年第8期5_9n-. (2n-3)!!—n\_ t (2n-2)!!-(2n-3)!!一(2/1-2)!!.n!(2n-2);_C2n;_2(n - 1) ! •几!n故心=4,其中A+2 =c n =4称 为卡特兰数.4分段递归分段递归类似于分段函数,当n属于不 同类时,递归关系表达式不同,表现形式为:A;g(an_l,--,a n_k) , n e B.例4设/(n)是定义在正整数集上的函 数,且对于任何正整数〃,均有/(1)=/(2)=1,/(3n)=/(ra) + 2 020,/(3n + l) = 3/(n) + 2 019,f(3n+2) = 2 019/(n).令人={i l l矣i矣n,/(i)为奇数丨,化=| il K矣n,/(i)为偶数}.(1) 证明:对于任何正整数n,均有14丨>丨5…丨;(2) 试确定/(2 019)的奇偶性.【分析】由I4J的意义,知(1)实际上是 证明数列{/(/i)丨的前n项中为奇数的项多于为偶数的项.由于目标中只关心数列|/(n)丨各项的奇偶性,从而,可用模2来处 理题给的递归关系,有/(1)=/(2)= 1,/(3n) =/(ra) (mod 2),f(3n + 1) =f(n)+ 1 (mod 2),/(3n +2) =f(n) (mod 2).当n = 1,2,…,18时,/(n)的奇偶性如 表1所示,其中,1表示奇数,〇表示偶数.表1n123456789f(n)111011011n101112131415161718f i n)010101011由此发现:〇的分布很“稀疏”—任何 两个0不相邻.为证明这一结论,将表1中的 数都用三进制表示,得到表2.表2n12101112202122100 f(n)111011011n101102110111112120121122200 A n)010101011观察那些使/(«)为偶数的三进制数n 构成的子列:^ = 11,21,101,110,112.可发现:使/(»)为偶数的三进制数n,其 三进制除去首位后,各数字和均为奇数.进一步发现上述性质也适用使/( n)为 奇数的三进制数〜其三进制除去首位后,各 数字和均为偶数.对于〃的三进制数:n = (aka k-l —¥〇)3((^#0),定义:(«) = %_, +a4_2 + …+ A +a。
递归算法题目

《递归算法题目》
同学们,今天咱们来聊聊递归算法题目。
啥是递归算法呢?简单说,就是一个函数自己调用自己。
听起来有点绕,对吧?别担心,咱们通过例子来理解。
比如说,计算阶乘。
咱们要算 5 的阶乘,也就是5! 。
正常算法是
5×4×3×2×1 ,那用递归算法呢,就是这样:先定义一个函数,假设叫factorial ,如果要算n 的阶乘,当n 等于0 或者 1 时,结果就是 1 ;如果n 大于 1 ,那结果就是n 乘以factorial(n - 1) 。
再比如,计算斐波那契数列。
这个数列前两个数是0 和 1 ,从第三个数开始,每个数都是前两个数的和。
用递归算法,咱们也能搞定。
那为啥要学递归算法呢?因为它能让一些复杂的问题变得简单。
就像走迷宫,有时候直接往前走找不到出口,但是退一步,换个角度,可能就柳暗花明啦。
不过,递归算法也有它的小麻烦。
要是不小心,可能会陷入无限循环,就像在一个圈圈里一直转,出不来啦。
那怎么才能做好递归算法的题目呢?首先,得把问题分析清楚,搞明白啥时候该停止递归。
然后,要仔细设计递归的条件和步骤。
同学们,递归算法就像一把神奇的钥匙,能打开很多难题的大门。
只要咱们多练习,多思考,就一定能掌握它,让它为咱们的编程之路助力!
加油吧,同学们,相信你们都能搞定递归算法题目!。
递归的经典例子

递归的经典例子
1. 算数学题的时候啊,像计算一个数的阶乘,这就是一个递归的经典例子呀!比如说计算 5 的阶乘,不就是 5 乘以 4 的阶乘嘛,而 4 的阶乘又等于 4 乘以 3 的阶乘,依次类推,这多有意思啊!
2. 还有走迷宫呢,你想想,当你在迷宫里遇到岔口,你选择一条路走,然后又遇到岔口,又继续选择,这不就跟递归很像嘛!你不断地进入更小的问题去探索,直到找到出口,这难道不是很神奇吗?
3. 画树也可以用递归呀!先画一个树干,然后树干上又分出树枝,每个树枝又可以当作新的树干去继续分树枝,这不就跟递归的过程一样嘛,哇塞,这样就能画出一棵复杂又漂亮的树啦!
4. 你知道汉诺塔游戏不?那就是典型的递归例子哟!要把盘子从一个柱子移到另一个柱子,不就得不断地用递归的方法去解决嘛,天啊,真是好烧脑又好有趣!
5. 再来说说我们电脑里的文件系统,那也是递归的体现呀!文件夹里有子文件夹,子文件夹里还有子文件夹,就这么一层层下去,像不像递归在大展身手呢?
6. 回忆一下我们看电影的时候,很多故事里不是也有类似递归的情节嘛!主角解决一个问题又引出新的问题,然后一直这么循环,这也可以说是一种故事里的递归呀,多有意思的发现呀!
总之,递归在生活中无处不在,它就像一把神奇的钥匙,能打开很多复杂问题的大门,给我们带来惊喜和挑战!。
简单递归例子

简单递归例子
1. 嘿,你知道计算阶乘吧,那就是个简单递归例子呀!比如说,计算 5 的阶乘,不就是 5 乘以 4 的阶乘嘛,4 的阶乘又是 4 乘以 3 的阶乘,一直
这样递推下去,直到 1 的阶乘就是 1,多神奇呀!
2. 哎呀呀,斐波那契数列也是呢!前两个数是 0 和 1,后面每个数都
是前两个数的和,这就是妥妥的递归呀!你想想,像不像搭积木,一层一层搭起来的感觉。
3. 还有走迷宫!当你在一个岔路口选择一条路走下去,如果碰到死胡同,就回到岔路口再选另一条路,这也有点递归的味道啊,是不是很有意思呢?
4. 你看画树的例子呀!先画一个主干,然后从主干上再长出分支,每个分支又可以长出更小的分支,这不就是用递归在构建嘛!
5. 计算最大公约数也能用递归呢!如果两个数不相等,就把大的数变成大的数减去小的数,小的数不变,然后再去算,这不就是在反复进行一个过程嘛,多酷!
6. 就说汉诺塔问题吧!把盘子从一个柱子移动到另一个柱子,不也得靠递归的思路嘛!这就像接力赛,一环扣一环的。
7. 像倒着数数也是呀!从 10 数到 1,不就是每次减去 1 然后接着数,这也是一种简单的递归呀!
8. 你瞧,生活中好多地方都有递归的影子呢!这真的很神奇,不是吗?简单的递归例子就在我们身边呀,让我们发现更多有趣的递归吧!
我的观点结论:递归在很多地方都有体现,而且非常有趣,大家可以多多留意去发现呀。
c语言,使用递归方法,求n的累加

c语言,使用递归方法,求n的累加1.引言1.1 概述概述部分的内容可以描述本文的主要内容和目标。
可以按照以下方式编写:概述在计算机科学中,递归是一种常用的问题解决方法。
它通过将一个问题分解为一个或多个相同类型的子问题,并通过解决这些子问题来解决原始问题。
在本文中,我们将探讨如何使用递归方法求解一个常见的问题:求n的累加。
本文主要介绍了递归方法以及如何在C语言中使用递归方法来进行求解。
递归方法的核心思想是将一个大问题分解为更小的子问题,并且每一个子问题都可以通过调用相同的函数来解决。
在C语言中,递归方法可以通过函数的自我调用来实现。
通过本文的学习,读者将了解到递归方法的基本原理和应用场景。
此外,我们将详细介绍如何在C语言中编写递归函数求解n的累加问题,并通过具体的示例代码来演示其实现过程。
最后,本文将对递归方法的优缺点进行总结,并对求解n的累加问题的结果进行分析。
通过本文的学习,读者将能够更好地理解递归方法的思想,并能够灵活运用该方法解决实际问题。
接下来,我们将首先介绍递归方法的基本概念和原理,然后详细讨论如何在C语言中使用递归方法求解n的累加问题。
让我们开始吧!1.2 文章结构2. 正文2.1 递归方法的介绍2.2 C语言中的递归方法2.1 递归方法的介绍递归是一种算法或函数调用自身的方式。
它在解决问题时,将问题分解为相同类型的子问题,并通过不断调用自身来解决这些子问题,最终得到原始问题的解答。
递归方法一般包括两个要素:基本条件和递归条件。
基本条件是指递归结束的条件,当满足这个条件时,递归将停止。
递归条件则是指问题分解的规则或方式。
递归方法常应用于数学、计算机科学和编程等领域。
它能够有效地解决一些具有重复性质的问题,使问题的解决过程更加简洁和优雅。
2.2 C语言中的递归方法在C语言中,递归方法的使用需要遵循一定的规则。
首先,递归方法必须具备基本条件,否则将导致无限递归,最终导致栈溢出。
其次,在递归方法中,需要将原始问题通过子问题的方式进行分解,直到满足基本条件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利用递归思想解决计数问题
福建省永定第一中学 简绍煌
我们常会遇到一些看似排列组合应用题的计数问题,但其复杂的情形有时令人无从下手,若是利用递归思想建立递归方程加以求解,则往往能够迎刃而解.
【例1】有一楼梯共10级,如果规定每步只能跨上一级或二级,要上10级,共有多少种走法?
解 设上n 级楼梯共有n a 种走法,当1n =时,11a =;当2n =时,22a =.
当有(2)n n >级楼梯时,其走法分两类.
第一类:走完前面1n -级楼梯有1n a -种走法,走第n 级只有1种走法;
第二类:走完前面2n -级楼梯有2n a -种走法,走第1n -级与第n 级楼梯时一步走,也是1种走法.
由分类计数原理,知n 级楼梯的走法为21(2)n n n a a a n N n --=+∈>且,.
由此可以算出1089a =.
点评 其通项公式可用换元法转化为一阶线性递归数列求解.
令11n n n c a x a +=-,使数列{}n c 是以2x 为公比的等比数列(12x x 、待定).
即211211()n n n n a x a x a x a +++-=-,∴212112()n n n a x x a x x a ++=+-.对照已给递归式,
有12121
1x x x x +==-,,即12x x 、是方程210x x --=的两个根.
从而121211112222x x x x +=
===
∴211111(222n n n n a a a a +++-=-) ①
或211111(222n n n n a a a +++-=-) ②
由式①得1
1131(222n n n a a -++-=;
由式②得1
1131(222
n n n a a -++--=.
消去
1n a +,得11n n n a --⎤
=⎥⎦
. 【例2】将数字123n ,,,,填入标号为123n ,,,,的n 个方格内,每格一个数字,则
标号与所填数字均不同的填法共有多少种? 解 设这n 个自然数的错排数为n a .
当1n =时,10a =;当2n =时,21a =.
当3n ≥时,n 个自然数的错排数可以分两类情况计算.
第一类:自然数(11)k k n ≤≤-与n 互换,这时错排数为2n a -;
第二类:自然数n 在第k 位上,但自然数不在第n 位上.这时就把第n 位看做第k 位,相当于将n 以外的1n -个自然数进行错排,错排数为1n a -.
所以,自然数n 在第k 位上的错排数共有21n n a a --+种,由于k 可以是121n - ,,,共
1n -种可能,故n 个自然数的错排数为21(1)()(3)n n n a n a a n --=-+≥.①
由①式得,112[(1)]n n n n a a a n a ----=---,∴112
(1)[]!!!!
n n n n a na a n a n n n n -----=--,
即
1121[]!(1)!(1)!(2)!
n n n n a a a
a n n n n n ----=-----. 用累乘法得2111
(1)(1)!(1)!!!n n n n a a n n n n ---=-=--;
再用累加法得21111
(1)!2!3!4!!n n a n n -=-+-+- ,
故!!!!
(1)2!3!4!!n n n n n n a n =-+-+-
234(2)!(3)!(4)!(1)n n n n n n C n C n C n C =---+--+- .②
利用此递推式,可以计算1993年的一道高考试题:
同室四个各写一张贺年卡,先集中起来,然后每人从中拿一张别人送出的贺年卡,则四张贺年卡不同的分配方式有几种?
解 10a =,21a =,3122()2a a a =+=,4233()9a a a =+=.所以,四张贺年卡不同的分配方式有9种.或直接用公式②计算.
【例3】有三根杆子A ,B ,C .A 杆上有64个穿孔圆盘,盘的尺寸由下往上依次变小.要求按下列规则将所有圆盘移至C 杆:1. 每次只能移动一个圆盘;2. 大盘不能叠在小盘上面.问最少要移动多少次?
解 设最少需要移动的次数为n a .我们这样来操作: 最底下的一个圆盘先不动它,把上面余下1n -个圆盘按规则移至B 杆(其移动次数为1n a -),然后把最底下的那个圆盘移至C 杆,最后再把1n -个圆盘转移到C 杆.这样,总共移动的次数为121(2)n n a a n -=+≥.下面我们求它的通项公式.
方法1(转化为1()n n a p q a p ++=+型递归数列).显然,11a =.
∵121(2)n n a a n -=+≥,∴112(1)(2)n n a a n -+=+≥.又112a +=,故数列{1}n a +是首项为2,公比为2的等比数列.∴12n
n a +=,即21n n a =-.故64
6421a =-(次).
方法2.转化为211()n n n n a a q a a +++-=-型递推数列. ∵121(2)n n a a n -=+≥, ① ∴121n n a a +=+. ②
②-①,得112()(2)n n n n a a a a n +--=-≥,故1{}n n a a +-是首项为212a a -=,
公比为2的等比数列,即1
1222n n n n a a -+-==
,再用累加法得21n n a =-.
方法3(用迭代法).
21221
2
3
1212(21)12212
2
2
2121n n n n n n n n
a a a a a ------=+=++=++==+++++=- .
此外,此题也可用归纳猜想法求之,但要用数学归纳法证明.
点评 这是著名的汉诺塔问题(又称河内塔问题).据说创世紀时Benares 有一座波罗教塔,是由三支钻石棒(Pag )所支撑,开始时神在第一根棒上放置64个由上至下依由小至大排列的金盘(Disc ),並命令僧侣将所有的金盘从第一根石棒移至第三根石棒,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当盘子全数搬运完毕之时,此塔将损毁,而也就是世界末日來临之时.
根据上面的结果,如果一秒钟能移动一块圆盘,仍将需5845.54亿年.目前按照宇宙大爆炸理论的推测,宇宙的年龄仅为137亿年.
【例4】四个人互相传球,由甲开始发球,这称为第一次传球,经过5次转球后,球仍然回到甲手中,试求所有不同的传球方式有多少种?
解 设第n 次传球时球仍然回到甲手中的不同方式共有n a 种,显然,10a =.第
1(2)n n -≥次传球时共有13n -种,而只有当球不在甲手中时才有可能传给甲,所以有
113n n n a a --=-.①
将①式化为111(1)(2)333n n n n a a n --=--≥,② 令3n n n a b =,则11
(1)3n
n b b -=--.③ 设11()3n n b b λλ--=--,比较系数,可得14λ=,则1111
()(2)434
n n b b n --=--≥.
所以,14n b ⎧
⎫-⎨⎬⎩⎭是以首项为14-,公比为13-的等比数列,
于是,1111()443n n b --=-- ,即1111
()434n n b -=--+ ,
故31(1)3(2)44
n n
n a n =-+≥ .③
当1n =时,由③式可得10a =,所以,31(1)3(*)44
n n n a n N =-+∈ . 当5n =时,有5531(1)36044n a =-+= .故所有不同的传球方式有60种. 点评 λ 亦可有方程1
(9)3
x x =--(不动点)直接求得.此传球问题是染色问题的一
个特例.传球次数对应为多边形的边数,人的个数对应为使用颜色的种数,球不传给自己对应为多边形相邻点染不同颜色,球每次只传到一个人手里对应为每个点只染一种颜色,指定从甲发球相当于给甲染确定的颜色.一般地,用(3)m m ≥种颜色给(3)n n ≥边形染色,要求每一个顶点染上一种颜色,且同一条棱上的两端异色,若其不同的染法为n a ,则
3(1)(2)a m m m =--,当4n ≥时,有递推式11(1)m n n a a m m --+=-,其通项公式为(1)(2)3(1)(1)(1)4n n n
m m m n a m m n --=⎧=⎨--+-≥⎩,,,.。