递归问题

Posted suwakow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归问题相关的知识,希望对你有一定的参考价值。

1.河内塔问题

  • 数学归纳法:①对最小规模时成立;②设对\(n=[1,k]\)时成立,证明对于\(n=k+1\)时也成立。于是问题对任意规模都成立。

它可以与递归的模型天然地结合在一起。

实际问题->递归式->数学归纳法->通项公式

  • 通过处理递归式的某些项会使得数学归纳更加简单。

2.平面上的直线

  • 展开递归式是求通项公式的好方法。

  • 对于不易直接分析的实例,可以讨论“损失”了多少。

3.JOJO问题

  • 对于一个递归式,把它的部分常量替换为未知数,希望求出它的通项公式中每个未知数的系数。

此时可以把每个未知数取一些特殊值,代入递归式中。

更加通用的方法是找一些简单的函数,令它满足递归式,借此列出方程,解出未知数的值。通过这种方式寻找未知数系数之间的联系,从而列出关于未知数系数的方程。

注意到有多少独立的未知数,我们就需要列出多少组方程。

同时,解除递归式中一些既定的限制(进制等),可以将递归式推广到更为一般的情况。

4.热身题

  1. 问题出在“类似的”,数学归纳法只能假设\([1,k]\)内的马是相同颜色,如果要推广到\([2,k+1]\)的情况,则需要证明\(k+1\)号马与前面颜色均相同。

  2. 发现对规模为\(k\)的问题,流程如下:①将\([1,k-1]\)移动到\(B\)柱;②将\(k\)移动到中间柱;③将[1,k-1]移动到\(A\)柱;④将\(k\)移动到\(B\)柱;⑤将\([1,k-1]\)移动到\(B\)柱。

\(T_n\)为将规模为\(n\)的问题解决所需的最小步数,由此获得递归式:

\[T_1=2\]

\[T_n=6T_n-1+2,n\geq 2\]

\(G_n=T_n+\frac25\),则\(G_1=\frac125,G_n=6(T_n-1+\frac25)=6G_n-1=\frac256^n\)

\(T_n=\frac25(6^n-1)\)

证明:\(T_n\)一定是整数,即\(5|(6^n-1)\)

对于\(n=1\)的情况,显然成立。

假设对于\([1,n-1]\)均成立。\(6^n-1=6\times6^n-1-1=(6-1)\times 6^n-1+6^ n-1-1\),由于对于\(n-1\)时成立,此处也成立。

  1. 显然\(A,B\)柱上会有此类正确摆放,只需考虑中间柱。发现在③过程时,\(n\)必然在中间柱,而\([1,n-1]\)\(B\)\(A\),必然整体经过中间柱。

  2. \(T_n\)为原规则下的最小步数,\(G_n\)是将\(n\)个始末位置不确定的圆盘排好的最小步数。问题转化为对于任意始末位置,证明\(G_n\leq T_n\)

对于\(n=1\)的情况,若始末位置在同一根石柱,则\(G_1=0<T_1\),否则\(G_1=T-1\),结论成立。

假设对于\([1,n-1]\)均成立。对于第\(n\)个圆盘,设始位置为\(x\),末位置为\(y\),中间位置为\(z\)。若\(x=y\),则\(G_n=G_n-1\leq T_n-1<T_n\)。否则,需要执行如下操作:①\([1,n-1]\)移动到\(z\),设此操作花费\(G_n-1,0\);②将\(n\)移动到\(y\);③将\([1,n-1]\)移动到对应末位置,设此操作花费\(G_n-1,1\)。此时\(G_n=G_n-1,0+G_n-1,1+1\leq 2T_n-1+1=T_n\)

由数学归纳法得证。

以上是关于递归问题的主要内容,如果未能解决你的问题,请参考以下文章

第五章学习小结

算法第一章

Java基础知识之File详解

递归问题

程序设计与算法

数据结构_邓