递归问题

Posted jadelemon

tags:

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

第一章递归问题

1.1 河内塔

n个圆盘移动从一个柱子借助一个柱子,移动到另一个柱子上的次数为 :

递推式:T(n)=2*T(n-1)+1 , n>0,T(0)=0

归纳法得出:T(n)=pow(2,n)-1 n>=0

寻求封闭形式的表达式三个阶段:

1)研究小的情形。

2)对有意义的量求出数学表达式并给出证明。

3)对数学表达式求出封闭形式并予以证明。


1.2 平面上的直线

n(直线)最多能把平面分为:

递推式:L(n)=L(n-1)+n , n>0 ,L(0)=1

对递推式展开或解开,如下:

L(n)=L(n-1)+n

=L(n-2)+(n-1)+n

=….

=L(0)+1+2+...+(n-1)+n

=1+n*(n+1)/2, n>=0

S(n)=1+2+...+n,S(n) 可以用S(n)和它的反向书写相加

n刀(呈锯齿形)最多能把平面分为:

Z(n)=L(2*n)-2*n=2*n*n-n+1, n>=0


1.3 约瑟夫问题

n个人形成圈,每隔一个人出列,问最后一个人的序列?

(1)若刚开始序列中有偶数(2*n)个人,经过一轮后,序列为:1,3,5….2*n-1, 既可以看作是n 个人的情况,序列号加倍减一, 即J(2*n)=2*J(n)-1 , n>=1

(2)若刚开始序列中有奇数(2*n+1)个人,经过一轮后,序列为:3,5,7,...2*n+1 ,看作n个人的情况,序列号加倍加一 ,J(2*n+1)=2*J(n)+1 , n>=1

递推式:

J(1)=1;

J(2*n)=2*J(n)-1 , n>=1

J(2*n+1)=2*J(n)+1 , n>=1

通过递推式打出表格:

n

1

2 3

4 5 6 7

8 9 10 11 12 13 14 15

J(n)

1

1 3

1 3 5 7

1 3 5 7 9 11 13 15

猜想 J(pow(2,m)+l)=2*l+1 , m>=0 ,0<=l<pow(2,m) 通过数学归纳法证明该猜想

 

待续。。。。。。。

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

递归:如何利用递归求解汉诺塔问题?

JS递归问题

Python进阶:递归算法

递归与分治策略-第一节:递归和典型递归问题

递归函数问题

递归问题(斐波那契,青蛙跳台,汉诺塔)