从汉诺塔问题看递推关系在实际问题中的应用

从汉诺塔问题看递推关系在实际问题中的应用
从汉诺塔问题看递推关系在实际问题中的应用

从汉诺塔问题看递推关系在实际问题中的应用

姓名:孙瑞 学号:200640501218 指导老师:马玉田

摘要:本文主要介绍了递推关系在实际中的应用,对几个实际问题的分析,让我们清楚的看到递推关系在

解决实际问的强大作用.

关键词:数列 递推关系 汉诺塔 九连环 蛛网模型

引言: 递推关系在实际问题中有着广泛的应用.由连续变量可以建立微分方程模型,离

散变量可以建立递推关系模型. 经过分析可知,常、偏微分方程除非在极其特殊的情况下,否则一般不存在解析解,所以讨论起来非常麻烦,比如最基本的平衡点的稳定性,往往只能得到局部稳定性,全局稳定性很难得到,而递推关系模型可以达到全局的效果,另外,由递推关系获得的结果又可以进一步进行优化分析、满意度分析、分类分析、相关分析等等。而在实际中,连续变量可以用离散变量来近似和逼近,从而微分方程模型就可以近似于某个递推关系模型。递推关系模型有着非常广泛的实际应用背景,我们的前人建立了许多著名的模型,如生态模型,传染病模型,经济模型(如蛛网模型),人口控制模型(如著名的马尔萨斯人口控制模型)等等.

定义:设012,,,,n a a a a 是一个数列,把该数列中n a 与它的前面几个

(01)i a i n ≤≤-关联起来构成的方程,称为一个递推关系,即(,,)n j k a f a a =

(0,1)j k n ≤≤-.

下面让我们看看递推关系在汉诺塔问题中的应用.

引例:汉诺塔(又称河内塔)问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。面对庞大的数字(移动圆片的次数)18446744073709551615,看来,众僧们耗尽毕生精力也不可能完成金片的移动

汉诺塔问题:它是由三根固定的柱子ABC 和不同尺寸的n 个圆盘组成.开始时,这些个大小不同的圆盘依其半径大小依次套在A 柱上,使大圆盘在底下.游戏的规则是:每次的圆盘从一根柱子移到另一根柱子上,但是不允许这个圆盘放在比它小的圆盘上面.游戏的目标是

把所有的圆盘从按照大小的次序从A 柱都移到C 根柱子上,可以利用中间的B 柱子,在移动过程中药始终将最大的圆盘放在最下面

.

令n H 表示解n 个圆盘的汉诺塔游戏所需要的移动次数,建立关于序列{n H }递推关系 解 开始时n 个圆盘在A 柱上,按照游戏规则用1n H -次移动将上面的1n -个圆盘移到C 柱子上,在这些移动中最大圆盘不动.然后,用1次移动将最大圆盘移到B 柱子上.再用1n H -次移动将C 柱子上的1n -个圆盘移到B 柱子上并且放到最大圆盘上面,于是,得到所求递推关系.

121n n H H -=+

和初始条件是11H =.因为根据游戏规则,一个圆盘可用1次移动从A 柱子放到B 柱子上.

为求解上述递推关系,对该问题首先用构造方法导出其解公式如下:

12322331

2

3

11221

2(21)12(21)2122212

2

2

21

222121

n n n n n n n n n n n H H H H H H ---------=+=++=++=+++=+++++=++++=-

其中11H =, 21n

n H =-确是递推关系121n n H H -=+的解.

现在我们再回头看看古印度的那个问题,勃拉玛要求移动64个圆盘,带入我们所求的关系式即是64

642118446744073709551615H =-=,面对这个天文数字,庙中僧侣要想移动这64个圆盘几乎是不可能的.

从汉诺塔问题我们看到递推关系在解决实际问题中的巨大作用,,它在众多领域里有着

广泛的应用,由此我们看看由汉诺塔问题所引出的一些实际问题.

(1)九连环方程问题

九连环是中国古代在民间流传的一种玩具,它是由9个环,9个直杆,一个条形框柄和一个平板组成,.每一个环都有一根杆相连,又顺序穿入后一个环,再连在条形横板上,从而构成一个整体,与其相适应,大小相当的一个条形框柄,可以将9个环穿套在上下框柄.只有它前面的换单独在框柄上面.只是穿套不可能一次性完成,有着严格的规律性和特别的要求.第一个环可以独立,自由地上或下条形框柄,而其后的各环要上或下框柄都受其前面的连杆和环的限制,任何一个环要独立,自由地上下框柄只要它前面的换单独在框柄上就能做到.现在可以假设前n 个环已经全部上到框柄上,需要移动环的次数为S (1,2,9)n n = .这样,将前

1n -个环都上到框柄上时,需要移动1S n -次,反之将前2n -个环下到框柄下.移动次数和之

前的情形一样为2S n -,此时只有第1n -个环单独在框柄上,可将第n 个环上到框柄上,移动一次,再将前2n -环上到框柄上,移动次数为2S n -,至此,前面n 个环都上到框柄上,总的移动次数为12212S S 1S S 2S 1n n n n n -----+++=++,按假设,它等于S n ,所以有

12S S 2S 1n n n --=++,补充定义0S 0=显然1S 1=(1,2,9)n = 这就是九连环的基本方程.

利用它可以计算出2S 2=,并递推地求出S n .直接求解可将两边都加上和减去1S 1n -+,得:

211S S 12(S S 1)2n n n n n ---++=++=和12S -S 12S n n n ---=,

求平均得: 1

2S S 2n n n --=+,

递推下去,有 +1+232

4S S 2S S 2i i i n n n ---=+++=+ ,

累加得1

11S S (2

2)3

i n i n ++=+-,其中i 与n 同奇偶性,并且1i =或2.

为求S i 和+12i ,可设S cos i u v n π+=,则有

1

21u v u v +=-??

+=?

, 解方程组,得 2,3u v ==, 所以1

S (3cos )2

i n π=

+

设+12cos i p q n π?+=,则有4181

p q p q +=-??

+=?,解方程组得1

2p =,3q =-.所以有

+122(3cos )i n π=+带入解表达式+111

S S (22)3

i n n i +=+-,有

111

S (3cos )[22(3cos )]23n n n n ππ+=++-+,

整理,得1111

S 2cos 326

n n n π+=?--,这即是九连环方程的解.

如果令1S S H n n n -+=表示第n 个环单独在框柄上要移动环的次数,代人基本方程,消去

S 有1H 2H 1n n -=+,这可以视为九连环第二方程,也就是我们前面所提及的汉诺塔方程

(2)递推关系在几何上的应用

例1 一个人从坐标原点0(0,0)A 出发,通过点(1,0),1(1,1)A 然后再以折线通过整数坐标的点11122223(1,1),(2,1),(2,1),(2,2),(2,2),(2,2),(2,3),(3,3)B C D A B C D A ------- 试求此人沿着折线到点(,)m n 时所走的路程(0)m n >>

.

解:用0a 表示这个人由原点0(0,0)A 走到1(1,1)A 的路程, k a 表示此人由点(,)k A k k 走到点

1(1,1)k A k k +++的路程,则当2k ≥时,由1(1,1)k A k k ---走到(,)k A k k 时经过的路程是

1111(1,1)(1,1)(1,1)(,1)(,).

k k k k k A k k B k k C k k D k k A k k ------→-+-→-+-+→-+→

所以,得

11111111(22)(22)(21)(21)86

k k k k k k k k k

a A B B C C D D A k k k k k --------=+++=-+-+-+-=-.

因为此公式当1k

=时得02a =,故数列{}n a 的通项公式186k a k -=-

(1,2,3,)k = .

当此人从 0(0,0)A 到(,)m A m m 时,走的路程是

1

0m k

k a

-=∑,即

1011

1

1

2P (86)86(1)

86422

m m

m

k k k k a k k m

m m m m m --====-=-+=?

-=-∑∑∑.

由点(,)m n 到点(,)m A m n 的路程为()m n -,故此人由原点0(0,0)A 走到点(,)m n 的路程是

2242()43.m m m n m m n ---=-+

在求图形中的无限个图形的面积或无限条线段长的和时,首先要确定这些面积或线段长所组成的数列.为此,要求出第一个图形的面积或第一条线段的长度,以及前后两个图形面积或线段之间的递推关系,然后再用有关的公式求和.

例2 如图所示,在直角ABC ?中, ABC=90,A=.θ?

∠∠自B 点出发,作1BD AC ⊥于1D ,作12D D AB ⊥于2D ,作23D D AC ⊥于3D , 依此做下去,得到无穷数列

11223CB,BD ,D D ,D D ,

(1) 求证: 11223CB+BD +D D +D D +>AB+AC . (2) 求证: 2

2

2

2

2

11223CB +BD +D D +D D +=AC .

(3) 为使11223ABD,AD D ,AD D ,??? 的面积之和不大于ABC ?的面积,求θ的取值范围.

解 (1)由已知条件可得

12

12BD BC cos ,

D D BD cos BC cos ,

θθθ=?=?=?

在n n+1n+2Rt D D D ?中可知: n+1n+2n n+1D D =D D cos θ (n=1,2,3,) .

由上式联立可知,数列11223CB,BD ,D D ,D D , 是首项为CB ,公比为cos θ的等比数列,又因而它又是无穷递缩等比数列,故

11223CB

CB,BD ,D D ,D D ,1-cos θ

=

,

CB (1cos )CB

AB+AC=CBctg +sin sin θθθθ

+?=

, 从而

CB (1cos )CB sin (1sin )

CB 1cos sin (1cos )sin θθθθθθθ

+?--=?--

θ是锐角,故上式的值为正值,因此

11223CB+BD +D D +D D +>AB+AC

(2) 显然,数列2

2

2

2

11223CB ,BD ,D D ,D D 是首项为2CB ,公比为2

cos θ的无穷递缩等比

数列,因此,

22

2

22

2

1

122322

2

2CB CB CB +BD +D D +D D +==

1cos sin CB ==AC sin θθθ-?? ???

(3)

1ABD 11112212311

S =BD AD =BD (BD ctg )

2211

=BD ctg (BC cos )ctg 22BC cos ,

2sin θθθθθθ

?????=?= 又1ABD ?∽12AD D ?,于是

112

2ABD 2122

AD D 1

S D D ==cos S BD θ??, ∴1

2ABD 2S

(cos )ABD θ?=?.

因为n n+1AD D ?与n+1n+2AD D ?相似,于是

n+1n+2n n+1

2AD D 22n+1n+2n+1n+22

AD D n n+1n n+1

S D D D D ==()=cos S D D D D θ??, ∴ n+1n+2

n n+122AD D AD D S

(cos )S θ??=.

由上式可知,数列11223ABD AD D AD D S ,S ,S ,??? 是首项为23BC cos 2sin θθ

,公比为2

cos θ的无穷递

缩等比数列,故

11223

23ABD AD D AD D 223232

BC cos 2sin S +S +S 1-cos BC cos BC (ctg ),2sin 2

θθ

θ

θθθ???+=== 又2ABC 11

S =

AB BC=BC ctg 22

θ??, 依题意令

223

BC BC (ctg )ctg 22

θθ≤ ,得2tg 1θ≥. 于是在02

π

θ<<的条件下,得

4

2

π

π

θ≤<

,

因此,当

4

2

π

π

θ≤<

时,11223ABD ,AD D ,AD D ,??? 的面积之和不大于ABC ?的面积.

(3)递推关系在概率论中的应用

随着科学技术的发展,递推关系在各个领域得到越来越多的应用,本文将介绍递推关系

的一个简单的应用,即利用递推关系求概率问题.全概率公式是概率中一个最基本、最常用、最重要的公式.利用全概率公式列出递推关系,然后通过解递推关系求得概率,从而简化了应用全概率公式求解某些问题的复杂繁琐性.下面让我们看两个具体实例:

例1 投掷硬币n 次,第一次出现正面的概率为c ,第二次后每次出现与前一次相同的表面的概率为p ,求第n 次出现正面的概率.

解 设n A ={第n 次出现正面},则由全概率公式可得:

1

1

1()()(

)()(

)n n n n n

A A P A P A P P n P A n

+++=+

.(1)n n P p P p =+-

即1(21)(1)n n P p P p +=-+- 由上述递推关系及初始条件1P c =

当1p ≠时,有1

1[1(21)](21)2

n n n p P c p ----=

+-

1

11(21)(21)22

n n p c p ---=-+-

111()(21)22

n c p -=--+,

当1p =时,有n P c ≡.

例2 在每一次试验中,事件A 出现的概率p ,试问n 次独立试验中A 出现偶次的概率多少? 解 设n P 表示n 次独立实验中A 出现偶次的概率,则根据题意可列出关系式

1(12)n n P p p P -=+-,

用迭代法将其展开可得

212223232212111

10(12)(12)(12),(12)(12)(12),

(12)(12)(12),

(12)(12)

(12).n n n n n n n n n n p P p p p P p P p p p P p P p p p P p P p p p P ----------=-+--=-+--=-+--=-+-

其中,01P =,且上述表示对原方程组进行递推连锁变换,同乘以12p -,然后将上述n 个方程两边相加,约去含1P 至1n P -的各项,则

21(12)(12)(12)(12)[1(12)](12)21(12),

2

n n

n n

n

n P p p p p p p p p p p p p

p -=+-+-++-+---=

+-+-=

(4) 递推关系在物理学中的应用

递推关系在工程技术领域的某些方面有重要应用.原因在于递推关系方程满足许多领域的方程形式,而解法又满足n 阶常系数方程的形式.所以物理领域中的问题只要条件满足递推关系方程,一般都可以方便解之.下面以二阶齐次递推关系方程为例,略述其在物理方面的一些应用.

例 如图l 所示系统,点0P 保持对地面的恒定电位0V ,试求1231,,,n P P P P - 各点的电位

.

分析: 根据Kirchhoff 定律:流入电路中任何节点的电流之和等于流出该节点的电流之和.因此在一般点1x P +(图2),可得11x x x i i I ++=+

,

由V

I R =,可得:

1121

2x x x x x V V V V V r r r

++++--=+

, 整理得 215

02

x x x V V V ++-+= (1)

式(1)在2,3,,(2)x n =- 时成立,就是说在点1P 与1n P -之外的所有点上成立,在点1P 与

1n P -,式(1)化为相应条件

2105

2V V V -+= (0V 为已知) (2)

225

02

n n V V ---+=(0n V =) (3) 方程(1)满足递推关系

2105

()02

x E E E V -+=

的形式, 故可采用递推关系方程求解,式(1)特征方程为

25

102

M M -+=

解得 11

2M = , 22M = 其全解为 1()22

x x

x V A B =+

将其带入式(2)和(3)得

05(

4)(2)422A A

B B V -+++=, 12125(2)(2)0222

n n n n A A

B B -----+++=, 求方程得 202221n n

A V =- , 021

21n B V =--, 所以电压的通解 20221(2)221

x

x x n

V V π=--. 可以验之,在0x =和x n =点均满足上式. (5)市场经济中的蛛网模型

经济背景与问题:在自由竞争的市场经济中,商品的价格是由市场上该商品的供应量决定的,供应量越大,价格就越低。另一方面,生产者提供的商品数量又是由该商品的价格决定的价格上升将刺激生产者的生产积极性,导致商品生产量增加;反之,价格降低会影响生产者的积极性,导致商品生产量下降。经营者要取得良好的经济效益,就必须把握好这两个因素规律,避免市场供求出现混乱。 模型假设与模型建立:

(1)将市场演变模式划分为若干销售时段,用自然数n 来表示; (2)设第n 个时段商品的数量为n x ,价格为n y ,1,2,n = ;

(3)价格与产量的关系为:()n n y f x =;

(4)假设下一时段的产量1n x +是决策者根据这期的价格决定的,设1()n n x h y +=,从而

1()n n y g x +=,由此建立递推关系:

1[()]n n x h f x +=, 1[()]n n y f h y +=.

模型的几何分析:两个变量n x 和n x 的变化过程,可以借助已有的函数f 和g 用几何方式表现出来。把点列(,)n n x y 和1(,)n n x y +在坐标系中描绘出来,

(,)(,())n n n n x y x f x =,111(,)(,())n n n n x y x g x +++=将点列

111(,)p x y ,221(,)p x y ,333(,)p x y ,443(,)p x y , 连接起来,就会形成象蛛网一样的折线。这

个图形被称作为蛛网模型(如下图).

易见:如果点列111221333443(,),(,),(,),(,),p x y p x y p x y p x y 最后收敛于点000(,)p x y ,则

00,n n x x y y →→,且0p 就是两条曲线的交点,从而达到稳定状态,反之是不稳定的。

几何上的进一步分析表明,如果曲线()y f x =和()y g x =在交点0p 处切线的斜率记为f k ,

g k ,则可知

当f g k k <时,0p 是稳定的; 当f g k k >时,0p 是不稳定的。

模型的递推关系方程分析:

设点000(,)p x y 满足:00()y f y =,00()x h y =,在0p 点附近取函数()f x ,()h x 的近似:

00(),0n n y y x x αα=-->, 100(),0n n x x y y ββ+=+->.

合并两式可得:

10(1),1,2,n n x x x n αβαβ+=-++=

其中,α-为f 在0p 点处的切线斜率;

1

β

为()g x 在点0p 处切线的斜率。 由方程10(1),1,2,n n x x x n αβαβ+=-++= ,递推可得110()[1()]n

n

n x x x αβαβ+=-+--. 所以,0p 点稳定的充要条件是:1αβ<,即1

αβ

<.

蛛网模型的推广:

如果决策时考虑到1n x +与n y ,1n y +都有关系,则可假设

1

1(

)2

n n n y y x g +++=2), 这时数学模型为 ()n n y f x = , 1

1()2

n n n y y x g +++= 对此模型仍用线性近似关系可得:

11(

)2n n n y y x g +++=,即1010(2)2

n n n x x y y y β

++-=+-. 再结合00(),0n n y y x x αα=-->可得:

2102(1)n n n x x x x αβαβαβ++++=+由方程的特征根为:1,2λ=

.

可知当2αβ<时,1,21λ<,解是稳定的。这个条件比原来的模型解的稳定性条件放宽了,说明决策水平提高了。

参考文献:

[1]姜启源谢金星叶俊数学模型【M】高等教育出版社 2003

[2]赵静但琦严尚安杨秀文数学建模与数学实验【M】高等教育出版社 2007

[3]刘佛清数列方法与技巧【M】华中工学院出版社 1986

[4]李盘林李丽双赵铭伟李洋王春立离散数学【M】高等教育出版社 1998

[5]裴礼文数学分析中的典型问题与方法【M】高等教育出版社 2006

[6]倪致祥朱永忠袁广宇黄时中大学物理学中国科学技术大学出版社 2007

[7]张莉关于几种递推数列通项公式的求法【M】丹东师范学报 1995

[8]田增伦函数方程【M】上海教育出版社 1979

[9]钱吉林.数学分析题解精粹【M】中央民族大学出版社 2005年

Recurive relation is applied to actual problems from

Hanoi Tower problem

Name:Sun Rui Student Number:200640501218 Advisor:Ma Yutian

Abstract: This paper bring in the application of recurive relation to actual problems and analysis on several problems.We can see distinctly that recursive relation is applied effectively to the actual problems. Key words: sequence of number; recursive relation; Hanoi Tower;Nine Chain; Cobweb Model

由递推公式求通项公式的方法

由递推公式求通项公式的方法 已知数列的递推公式,求取其通项公式是数列中一类常见的题型,这类题型如果单纯的看某一个具体的题目,它的求解方法灵活是灵活多变的,构造的技巧性也很强,但是此类题目也有很强的规律性,存在着解决问题的通法,本文就高中数学中常见的几类题型从解决通法上做一总结,方便于学生学习和老师的教学,不涉及具体某一题目的独特解法与技巧。 一、1()n n a a f n +=+型数列,(其中()f n 不是常值函数) 此类数列解决的办法是累加法,具体做法是将通项变形为1()n n a a f n +-=,从而就有 21321(1),(2),,(1).n n a a f a a f a a f n --=-=-=- 将上述1n -个式子累加,变成1(1)(2)(1)n a a f f f n -=+++- ,进而求解。 例1. 在数列{}n a 中,112,21,.n n n a a a n a +==+-求 解:依题意有 213211,3,,23n n a a a a a a n --=-=-=- 逐项累加有221(123)(1)1323(1)212n n n a a n n n n +---=+++-= =-=-+ ,从而223n a n n =-+。 注:在运用累加法时,要特别注意项数,计算时项数容易出错. 变式练习:已知{}n a 满足11=a ,) 1(11+=-+n n a a n n ,求}{n a 的通项公式。 二、)(1n f a a n n ?=+型数列,(其中()f n 不是常值函数) 此类数列解决的办法是累积法,具体做法是将通项变形为1()n n a f n a +=,从而就有 32121 (1),(2),,(1)n n a a a f f f n a a a -===- 将上述1n -个式子累乘,变成1 (1)(2)(1)n a f f f n a =???- ,进而求解。 例2. 已知数列{}n a 中11123,(2)321 n n n a a a n n --==?≥+,求数列{}n a 的通项公式。

汉诺塔c++程序

void Hanoi(int platesCount, int from, int dest, int by) { if (platesCount==1) { printf( "Move the plate from %d to %d through %d" , from, dest, by); }else { Hanoi(platesCount -1, from, by, dest); Hanoi(1, from, dest, by); Hanoi(platesCount -1, by, dest, from); } } // Advance one step to solve Hanoi void HanoiDrawer::SolveNextStep() { int platesCount , source , destination , intermediate; if(listSavedState.size()==0) { this->Hanoi(this->iPlatesCount, HanoiDrawer::SOURCE , HanoiDrawer::DESTINATION, HanoiDrawer::INTERMEDIATE); } if(listSavedState.size() % 4 != 0 ) { return; } platesCount = listSavedState.front(); listSavedState.pop_front(); source = listSavedState.front(); listSavedState.pop_front(); destination = listSavedState.front(); listSavedState.pop_front(); intermediate = listSavedState.front(); listSavedState.pop_front();

由递推公式求通项公式典型例题素材

如何由递推公式求通项公式 高中数学递推数列通项公式的求解是高考的热点之一,是一类考查思维能力的题型,要求考生进行严格的逻辑推理。找到数列的通项公式,重点是递推的思想:从一般到特殊,从特殊到一般;化归转换思想,通过适当的变形,转化成等差数列或等比数列,达到化陌生为熟悉的目的。 下面就递推数列求通项的基本类型作一个归纳,以供参考。 类型一:1()n n a a f n +-= 或 1()n n a g n a += 分析:利用迭加或迭乘方法。即:112211()()+()n n n n n a a a a a a a a ---=-+-+-+…… 或121121 n n n n n a a a a a a a a ---=…… 例1.(1) 已知数列{}n a 满足11211,2n n a a a n n += =++,求数列{}n a 的通项公式。 (2)已知数列{}n a 满足1(1)1,2n n n a a s +==,求数列{}n a 的通项公式。 解:(1)由题知:121111(1)1 n n a a n n n n n n +-===-+++ 112211()())n n n n n a a a a a +(a -a a ---∴=-+-++…… 1111111()()()121122n n n n =-+-++-+---…… 312n = - (2)2(1)n n s n a =+ 112(2)n n s na n --∴=≥ 两式相减得:12(1)(2)n n n a n a na n -=+-≥ 即: 1(2)1 n n a n n a n -=≥- 121121 n n n n n a a a a a a a a ---∴=?? (121121) n n n n -=??--…… n = 类型二:1(,(1)0)n n a pa q p q pq p +=+-≠其中为常数,

由递推公式求通项公式的三种方法

由递推公式求通项公式的三种方法 递推公式和通项公式是数列的两种表示方法,它们都可以确定数列中的任意一项,只是由递推公式确定数列中的项时,不如通项公式直接,下面介绍由递推公式求通项公式的几种方法. 1.累加法 [典例1] 数列{a n }的首项为3,{b n }为等差数列且b n =a n +1-a n (n ∈N * ).若b 3=-2,b 10=12,则a 8=( ) A .0 B .3 C .8 D .11 [解析] 由已知得b n =2n -8,a n +1-a n =2n -8,所以a 2-a 1=-6,a 3-a 2=-4,…,a 8-a 7=6,由累加法得a 8-a 1=-6+(-4)+(-2)+0+2+4+6=0,所以a 8=a 1=3. [答案] B [题后悟道] 对形如a n +1=a n +f (n )(f (n )是可以求和的)的递推公式求通项公式时,常用累加法,巧妙求出a n -a 1与n 的关系式. 2.累乘法 [典例2] 已知数列{a n }中,a 1=1,前n 项和S n = n +23a n . (1)求a 2,a 3; (2)求{a n }的通项公式. [解] (1)由S 2=43 a 2得3(a 1+a 2)=4a 2, 解得a 2=3a 1=3. 由S 3=53 a 3得3(a 1+a 2+a 3)=5a 3, 解得a 3=32 (a 1+a 2)=6. (2)由题设知a 1=1. 当n >1时,有a n =S n -S n -1=n +23a n -n +13 a n -1,

整理得a n =n +1n -1 a n -1. 于是a 2=31a 1,a 3=42a 2,…,a n -1=n n -2a n -2,a n =n +1n -1 a n -1. 将以上n -1个等式中等号两端分别相乘,整理得a n = n n +1 2. 综上可知,{a n }的通项公式a n = n n +1 2. [题后悟道] 对形如a n +1=a n f (n )(f (n )是可以求积的)的递推公式求通项公式时,常用累乘法,巧妙求出a n a 1与n 的关系式. 3.构造新数列 [典例3] 已知数列{a n }满足a 1=1,a n +1=3a n +2;则a n =________. [解析] ∵a n +1=3a n +2,∴a n +1+1=3(a n +1), ∴a n +1+1a n +1 =3,∴数列{a n +1}为等比数列,公比q =3, 又a 1+1=2,∴a n +1=2·3 n -1, ∴a n =2·3n -1-1. [答案] 2×3 n -1-1 [题后悟道] 对于形如“a n +1=Aa n +B (A ≠0且A ≠1)”的递推公式求通项公式,可用迭代法或构造等比数列法. 上面是三种常见的由递推公式求通项公式的题型和对应解法,从这些题型及解法中可以发现,很多题型及方法都是相通的,如果能够真正理解其内在的联系及区别,也就真正做到了举一反三、触类旁通,使自己的学习游刃有余,真正成为学习的主人.

用VB设计汉诺塔动画游戏

本栏目责任编辑:谢媛媛软件设计开发Computer Knowledge and Technology 电脑知识 与技术第5卷第30期(2009年10月)用VB 设计汉诺塔动画游戏 刘德强 (无锡职业技术学院,江苏无锡214024) 摘要:汉诺塔问题是程序设计教学中关于递归调用的经典案例。该文介绍了用VB 设计汉诺塔动画游戏程序的基本过程,其中重点介绍了用VB 的自定义数据类型和图形处理技术设计游戏步点状态记录和动画效果的方法。 关键词:VB ;汉诺塔;动画 中图分类号:TP311文献标识码:A 文章编号:1009-3044(2009)30-8460-03 The Designing of Hanoi Towers Animation Game by VB LIU De-qiang (Wuxi Institute of Technology,Wuxi 214024,China) Abstract:The Hanoi Towers is a typical case of recursive calls in programming teaching.This paper introduces the basic process of design -ing Hanoi Towers animation game by VB,focuses on recording game state between two steps and designing animation by self-defined data type and graph skill in VB. Key Words:VB;Hanoi;animation 汉诺塔问题源自印度的一个古老传说,传至现代演变成了汉诺塔游戏:有A 、B 、C 三个垂直杆和若干个大小各不相同的圆片。开始时圆片全部套在A 杆上,且从下至上圆片大小依次递减。要求借助B 杆,将圆片全部移到C 杆上,每次只能移动一片,并且整个过程中三个杆上的圆片都必须保持大的在下小的在上。游戏的难度由开始时放置在A 杆上圆片的个数进行控制。 1游戏步点状态记录设计 笔者设计的汉诺塔游戏程序主要包括演示和游戏两方面的功能。演示功能实现的是根据汉诺塔问题算法预先计算出的圆片移动顺序由计算机自行对圆片进行移动;而游戏功能是指计算机通过人机交互界面根据游戏者的实时操作顺序进行圆片的移动。图1是程序运行时界面。无论是演示还是游戏,计算机执行的基本动作元素是相同的,即圆片从一个杆上移动到另一个杆上,这一过程体现在程序设计中就是在新的位置对圆片图形进行重画,它与每个杆的步点状态密切相关。 步点状态是指每完成一步操作以后,开始下一步操作之前,一个杆上 的圆片数量及各圆片的位置和大小等多个特征综合构成的状态,是多个 数据的集合。将开始时圆片数记为n ,从初始状态圆片都在A 杆上,到终 止状态n 个圆片移到C 杆上,其间每次移动圆片,各杆的步点状态都会 发生变化。游戏进程中“记”住各杆的当前步点状态,是实现不断移动圆片 的关键。以要移动A 杆上的一个圆片到B 杆为例:要判断圆片根据规则 是否可以移动及圆片移动后放置在B 杆的什么位置(y 坐标),就必须知 道当前B 杆上最上端圆片的大小和B 杆上当前圆片数量,即B 杆的当前 步点状态。综合以上分析,游戏步点状态记录是程序设计中的要点。 鉴于描述步点状态需要多个数据,且数据间相互关联并构成整体,笔 者在设计中采用了自定义数据类型的方法,数据类型名称为circles ,所含 内容和定义格式如下: Type circles counts As integer r()As integer x As integer y()As integer End Type circles 类型中,数据成员counts 用于记录杆上实际圆片数,r 用于记录各圆片的半径,x 记录各圆片圆心的x 坐标,y 记录各圆片圆心的y 坐标。因为每次游戏设置的初始圆片数是不确定的且游戏进程中各杆都可能出现多个圆片,所以数据成员r 和y 定义为动态数组。 数据类型circles 定义以后,先使用该类型定义三个实例a 、b 、c ,分别代表A 、B 、C 三个杆的步点状态。语句如下: Dim a As circles ,b As circles ,c As circles 当初始圆片数量确定后(记为n),可使用下列语句对A 杆的步点状态a 进行初始化。 投稿日期:2009-08-22 作者简介:刘德强(1965-),江苏靖江人,无锡职业技术学院讲师。 图1运行界面ISSN 1009-3044Computer Knowledge and Technology 电脑知识与技术Vol.5,No.30,October 2009,pp.8460-8462E-mail:xsjl@https://www.360docs.net/doc/1413980963.html, https://www.360docs.net/doc/1413980963.html, Tel:+86-551-569096356909648460

汉诺塔 java 程序

汉诺塔java 程序 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class AutoMoveDisc extends JDialog implements ActionListener{ int amountOfDisc=3; TowerPoint [] pointA,pointB,pointC; char [] towerName; Container con; StringBuffer moveStep; JTextArea showStep; JButton bStart,bStop,bContinue,bClose; Timer time; int i=0,number=0; AutoMoveDisc(Container con){ setModal(true); setTitle("自动演示搬盘子过程"); this.con=con; moveStep=new StringBuffer(); time=new Timer(1000,this); time.setInitialDelay(10); showStep=new JTextArea(10,12); bStart=new JButton("演示"); bStop=new JButton("暂停"); bContinue=new JButton("继续"); bClose=new JButton("关闭"); bStart.addActionListener(this); bStop.addActionListener(this); bContinue.addActionListener(this); bClose.addActionListener(this); JPanel south=new JPanel(); south.setLayout(new FlowLayout()); south.add(bStart); south.add(bStop); south.add(bContinue); south.add(bClose); add(new JScrollPane(showStep),BorderLayout.CENTER); add(south,BorderLayout.SOUTH); setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); towerName=new char[3]; addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ time.stop(); setVisible(false);

九类常见递推数列求通项公式方法

递推数列通项求解方法 类型一:1n n a pa q += +(1p ≠) 思路1(递推法):()123()n n n n a pa q p pa q q p p pa q q q ---??=+=++=+++=?? ......121(1n p a q p p -=++++ (2) 1 1)11n n q q p a p p p --??+=+?+ ? --?? 。 思路2(构造法):设()1n n a p a μμ++=+,即()1p q μ-=得1 q p μ= -,数列 {}n a μ+是以1a μ+为首项、p 为公比的等比数列,则1 111n n q q a a p p p -??+ =+ ?--??,即1111n n q q a a p p p -??=++ ? --?? 。 例1 已知数列{}n a 满足123n n a a -=+且11a =,求数列{}n a 的通项公式。 解:方法1(递推法): ()123232(23)3222333n n n n a a a a ---??=+=++=+++=?? (1) 22 3(122n -=++++ (2) 11 332 )12232112n n n --+??+=+?+=- ? --? ?。 方法2(构造法):设()12n n a a μμ++=+,即3μ=,∴数列{}3n a +是以134 a +=为首项、2为公比的等比数列,则113422n n n a -++=?=,即1 23n n a +=-。

1n n +思路1(递推法): 123(1)(2)(1)(3)(2)(1)n n n n a a f n a f n f n a f n f n f n ---=+-=+-+-=+-+-+-= …1 11 ()n i a f n -==+∑。 思路2(叠加法):1(1)n n a a f n --=-,依次类推有:12(2)n n a a f n ---=-、 23(3)n n a a f n ---=-、…、21(1)a a f -=,将各式叠加并整理得1 11 ()n n i a a f n -=-= ∑ ,即 1 11 ()n n i a a f n -==+ ∑ 。 例2 已知11a =,1n n a a n -=+,求n a 。 解:方法1(递推法):123(1)(2)(1)n n n n a a n a n n a n n n ---=+=+-+=+-+-+= ......1[23a =+++ (1) (1)(2)(1)]2 n i n n n n n n =++-+-+= = ∑ 。 方法2(叠加法):1n n a a n --=,依次类推有:121n n a a n ---=-、232n n a a n ---=-、…、 212a a -=,将各式叠加并整理得12 n n i a a n =-= ∑ ,12 1 (1)2 n n n i i n n a a n n ==+=+ = = ∑ ∑ 。

汉诺塔问题的三种实现

// test_project.cpp : 定义控制台应用程序的入口点。//汉诺塔问题的 // //递归实现 /*#include "stdafx.h" #include using namespace std; int count=0;//记录移动到了多少步 void Move(int n,char From,char To); void Hannoi(int n,char From, char Pass ,char To); //把圆盘从From,经过pass,移动到To int main() { int n_count=0; cout<<"请输入圆盘个数:"; cin>>n_count; Hannoi(n_count,'A','B','C'); } void Move(int n,char From,char To)

{ count++; cout<<"第"<

/*后来一位美国学者发现一种出人意料的简单方法,只要轮流进行两步操作就可以了。首先把三根柱子按顺序排成品字型,把所有的圆盘按从大到小的顺序放在柱子A上,根据圆盘的数量确定柱子的排放顺序:若n为偶数,按顺时针方向依次摆放A B C; 若n为奇数,按顺时针方向依次摆放A C B。 ()按顺时针方向把圆盘从现在的柱子移动到下一根柱子,即当n为偶数时,若圆盘在柱子A,则把它移动到B;若圆盘在柱子B,则把它移动到C;若圆盘在柱子C,则把它移动到A。 ()接着,把另外两根柱子上可以移动的圆盘移动到新的柱子上。即把非空柱子上的圆盘移动到空柱子上,当两根柱子都非空时,移动较小的圆盘。这一步没有明确规定移动哪个圆盘,你可能以为会有多种可能性,其实不然,可实施的行动是唯一的。 ()反复进行()()操作,最后就能按规定完成汉诺塔的移动。 所以结果非常简单,就是按照移动规则向一个方向移动金片: 如阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C 汉诺塔问题也是程序设计中的经典递归问题,下面我们将给出递归和非递归的不同实现源代码。*/ /*#include "stdafx.h" #include #include

汉诺塔程序设计报告

数据结构 学院:信息学院 班级:计科高职13-2 姓名:曲承玉 学号:201303014044

汉诺塔程序设计报告 一、题目 汉诺塔(Towers of Hanoi)问题 二、设计要求 1、在窗口中画出初始时塔和碟子的状态。 2、可以以自动或手动两种方式搬移碟子。 3、自动搬移可以通过定时器或多线程的方法,每一次移动的时间间隔可以自定,以人眼观察比较舒服为宜,每一次的移动过程如能实现动画最好。 4、定义塔的描述类和碟子的描述类。 5、在程序中,碟子的数目及每次移动的时间间隔可以通过对话框设置(也应该有默认值)。 6、支持暂停功和继续的功能(在自动搬移过程中可以暂停,并继续)。 7、暂停后,可以将当前的状态保存(碟子和塔的组合关系)。 8、可以从7中保存的文件中读出某个状态,并继续移动。 三、问题分析 1、已知有三个塔(1、 2、3)和n个从大到小的金碟子,初始状态时n个碟子按从大到小的次序从塔1的底部堆放至顶部。 2、要求把碟子都移动到塔2(按从大到小的次序从塔2的底部堆放至顶部)。 3、每次移动一个碟子。

4、任何时候、任何一个塔上都不能把大碟子放到小碟子的上面。 5、可以借助塔3。(图1-1) 图1-1 首先考虑a杆下面的盘子而非杆上最上面的盘子,于是任务变成了: 1、将上面的63个盘子移到b杆上; 2、将a杆上剩下的盘子移到c杆上; 3、将b杆上的全部盘子移到c杆上。 将这个过程继续下去,就是要先完成移动63个盘子、62个盘子、61个盘子....1个盘的工作。 四、算法选择 汉诺塔程序设计算法的实质就是递归递归思想的运用。现将其算法简述如下: 为了更清楚地描述算法,可以定义一个函数hanoi(n,a,b,c)。该函数的功能是:将n个盘子从塔a上借助塔b移动到塔c上。这样移动n 个盘子的工作就可以按照以下过程进行: 1) hanoi(n-1,a,c,b);//将n-1个金盘由a借助c移到b 2) 将最下面的金盘从a移动到c上;

专题由递推关系求数列的通项公式(含答案)

专题 由递推关系求数列的通项公式 一、目标要求 通过具体的例题,掌握由递推关系求数列通项的常用方法: 二、知识梳理 求递推数列通项公式是数列知识的一个重点,也是一个难点,高考也往往通过考查递推数列来考查学生对知识的探索能力,求递推数列的通项公式一般是将递推公式变形,推得原数列是一种特殊的数列或原数列的项的某种组合是一种特殊数列,把一些较难处理的数列问题化为熟悉的等差或等比数列。 三、典例精析 1、公式法:利用熟知的公式求通项公式的方法称为公式法。常用的公式有???≥???????-=????????????????=-21 11n S S n S a n n n 及 等差数列和等比数列的通项公式。 例1 已知数列{n a }中12a =,2 +2n s n =,求数列{n a }的通项公式 评注 在运用1n n n a s s -=-时要注意条件2n ≥,对n=1要验证。 2、累加法:利用恒等式()()1211+......+n n n a a a a a a -=+--求通项公式的方法叫累加法。它是求型如 ()1+f n n n a a +=的递推数列的方法(其中数列(){}f n 的前n 项和可求)。 例2 已知数列{n a }中112a =,121 ++32 n n a a n n +=+,求数列{n a }的通项公式 评注 此类问题关键累加可消中间项,而(f n )可求和则易得n a 3、.累乘法:利用恒等式3 21121 n n n a a a a a a a a -=? ???????()0n a ≠求通项公式的方法叫累乘法。它是求型如()1n n a g n a +=的递推数列的方法(){}() g n n 数列可求前项积

汉诺塔问题

实验二知识表示方法 梵塔问题实验 1.实验目的 (1)了解知识表示相关技术; (2)掌握问题规约法或者状态空间法的分析方法。 2.实验内容(2个实验内容可以选择1个实现) (1)梵塔问题实验。熟悉和掌握问题规约法的原理、实质和规约过程;理解规约图的表示方法; (2)状态空间法实验。从前有一条河,河的左岸有m个传教士、m个野人和一艘最多可乘n人的小船。约定左岸,右岸和船上或者没有传教士,或者野人数量少于传教士,否则野人会把传教士吃掉。搜索一条可使所有的野人和传教士安全渡到右岸的方案。 3.实验报告要求 (1)简述实验原理及方法,并请给出程序设计流程图。 我们可以这样分析: (1)第一个和尚命令第二个和尚将63个盘子从A座移动到B座; (2)自己将底下最大的盘子从A移动到C; (3)再命令第二个和尚将63个盘子从B座移动到C;(4)第二个和尚命令第三个和尚重复(1)(2)(3);以此类推便可以实现。这明显是个递归的算法科技解决的问

题。 (2)源程序清单: #include #include using namespace std; void main() { void hanoi(int n,char x,char y,char z);

int n; printf("input the number of diskes\n"); scanf("%d",&n); hanoi(n,'A','B','C'); } void hanoi(int n,char p1,char p2,char p3) { if(1==n) cout<<"盘子从"<

常见递推数列通项公式的求法典型例题及习题

常见递推数列通项公式的求法典型例题及习题 【典型例题】 [例1] b ka a n n +=+1型。 (1)1=k 时,}{1n n n a b a a ?=-+是等差数列,)(1b a n b a n -+?= (2)1≠k 时,设)(1m a k m a n n +=++ ∴ m km ka a n n -+=+1 比较系数:b m km =- ∴ 1-= k b m ∴ }1{-+ k b a n 是等比数列,公比为k ,首项为11-+k b a ∴ 11)1(1-?-+=-+ n n k k b a k b a ∴ 1)1(11--?-+=-k b k k b a a n n [例2] )(1n f ka a n n +=+型。 (1)1=k 时,)(1n f a a n n =-+,若)(n f 可求和,则可用累加消项的方法。 例:已知}{n a 满足11=a ,)1(1 1+= -+n n a a n n 求}{n a 的通项公式。 解: ∵ 11 1)1(11+- =+= -+n n n n a a n n ∴ n n a a n n 1111--= -- 112121---=---n n a a n n 21 3132-- -=---n n a a n n …… 312123-= -a a 2 1112-=-a a

对这(1-n )个式子求和得: n a a n 111- =- ∴ n a n 1 2- = (2)1≠k 时,当b an n f +=)(则可设)()1(1B An a k B n A a n n ++=++++ ∴ A B k An k ka a n n --+-+=+)1()1(1 ∴ ???=--=-b A B k a A k )1()1( 解得: 1-= k a A ,2)1(1-+-=k a k b B ∴ }{B An a n ++是以B A a ++1为首项,k 为公比的等比数列 ∴ 1 1)(-?++=++n n k B A a B An a ∴ B An k B A a a n n --?++=-11)( 将A 、B 代入即可 (3)n q n f =)((≠q 0,1) 等式两边同时除以1 +n q 得q q a q k q a n n n n 1 11+?=++ 令 n n n q a C = 则q C q k C n n 1 1+ =+ ∴ }{n C 可归为b ka a n n +=+1型 [例3] n n a n f a ?=+)(1型。 (1)若)(n f 是常数时,可归为等比数列。 (2)若)(n f 可求积,可用累积约项的方法化简求通项。 例:已知: 311= a ,1 121 2-+-=n n a n n a (2≥n )求数列}{n a 的通项。 解:123537532521232121212233 2211+= ?--?--?+-=???-----n n n n n n n a a a a a a a a a a n n n n n n ΛΛ ∴ 1 211231+= +? =n n a a n

汉诺塔程序实验报告

实验题目: Hanoi 塔问题 一、问题描述: 假设有三个分别命名为 A , B 和C 的塔座,在塔座 B 上插有n 个直径大小各不相同、从小到 大编号为1, 2,…,n 的圆盘。现要求将塔座 B 上的n 个圆盘移至塔座 A 上并仍按同样顺序 叠排,圆盘移动时必须遵守以下规则: (1 )每次只能移动一个圆盘; (2)圆盘可以插在 A , B 和C 中任一塔上; ( 3)任何时刻都不能将一个较大的圆盘压在较小的圆盘之上。 要求: 用程序模拟上述问题解决办法,并输出移动的总次数, 圆盘的个数从键盘输入; 并想 办法计算出程序运行的时间。 二、 算法思路: 1 、建立数学模型: 这个问题可用递归法解决,并用数学归纳法又个别得出普遍解法: 假设塔座B 上有3个圆盘移动到塔座 A 上: (1) "将塔座B 上2个圆盘借助塔座 A 移动到塔座C 上; (2) "将塔座B 上1个圆盘移动到塔座 A 上; (3) "将塔座C 上2个圆盘借助塔座 B 移动到塔座A 上。 其中第 2步可以直接实现。第 1步又可用递归方法分解为: 1.1"将塔座B 上1个圆盘从塔座 1.2"将塔座B 上1个圆盘从塔座 1.3"将塔座A 上1个圆盘从塔座 第 3 步可以分解为: 3.1将塔座C 上1个圆盘从塔座 3.2将塔座C 上1个圆盘从塔座 3.3将塔座B 上1个圆盘从塔座 综上所述:可得到移动 3 个圆盘的步骤为 B->A,B->C, A->C, B->A, C->B, C->A, B->A, 2、算法设计: 将n 个圆盘由B 依次移到A , C 作为辅助塔座。当 n=1时,可以直接完成。否则,将塔 座B 顶上的n-1个圆盘借助塔座 A 移动到塔座C 上;然后将圆盘B 上第n 个圆盘移到塔 座A 上;最后将塔座 C 上的n-1个圆盘移到塔座 A 上,并用塔座B 作为辅助塔座。 三、原程序 #include #include #include int times = 0; void move(char a, char b) { printf("%c > %c \n", a,b); } void hno(int n,char a , char b, char c) { if (n==1) { move(a,c); times ++; } X 移动到塔座 A ; X 移动到塔座 C ; Z 移动到塔座 C 。 Y 移动到塔座 Y 移动到塔座 X 移动到塔座 B ; A ;

汉诺塔问题与递归思想教学设计

一、教学思想(包括教学背景、教学目标) 1、教学背景 本课程“递归算法”,属于《数据结构与算法》课程中“栈和队列”章节的重点和难点。数据结构与算法已经广泛应用于各行各业的数据存储和信息处理中,与人们的社会生活密不可分。该课程是计算机类相关专业核心骨干课程,处于计算机学科的核心地位,具有承上启下的作用。不仅成为全国高校计算机类硕士研究生入学的统考科目,还是各企业招聘信息类员工入职笔试的必考科目。数据结构与算法课程面向计算机科学与技术、软件工程等计算机类学生,属于专业基础课。 2、教学大纲 通过本课程的学习,主要培养学生以下几个方面的能力: 1)理解递归的算法; 2)掌握递归算法的实现要素; 3)掌握数值与非数值型递归的实现方法。 根据学生在学习基础和能力方面的差异性,将整个课程教学目标分成三个水平:合格水平(符合课标的最低要求),中等以上水平(符合课标的基本要求),优秀水平(符合或超出课标提出的最高要求)。具体如下表:

二、课程设计思路(包括教学方法、手段) “递归算法”课程以故事引入、案例驱动法、示范模仿、启发式等多元化教学方法,设计课程内容。具体的课堂内容如下所示:

1 1 2 3 3 7 4 15 5 31 count = 2n-1 思考:若移动速度为1个/秒,则需要 (264-1)/365/24/3600 >= 5849亿年。 四、总结和思考 总结: 对于阶乘这类数值型问题,可以表达成数学公式,然后从相应的公式入手推导,解决这类问题的递归定义,同时确定这个问题的边界条件,找到结束递归的条件。 对于汉诺塔这类非数值型问题,虽然很难找到数学公式表达,但可将问题进行分解,问题规模逐渐缩小,直至最小规模有直接解。 思考: 数值型问题:斐波那契数列的递归设计。 非数值型问题:八皇后问题的递归设计。阐述总结知识拓展 三、教学特色(总结教学特色和效果) 递归算法课程主要讨论递归设计的思想和实现。从阶乘实例入手,由浅入深,层层深入介绍了递归的设计要点和算法的实现。从汉诺塔问题,通过“边提问,边思考”的方式逐层深入地给出算法的分析和设计过程。通过故事引入、案例导入、实例演示、PPT展示、实现效果等“多元化教学方式”,努力扩展课堂教学主战场。加上逐步引导、问题驱动,启发学生对算法的理解,并用实例演示展示算法的分析过程,在编译环境下实现该算法,加深对算法实现过程的认识。 1、知识点的引入使用故事诱导法讲授 通过“老和尚讲故事”引入函数的递归调用,并通过“世界末日问题” 故事引入非数值型问题的递归分析,激发学习积极性,挖掘学生潜能。

递推公式求通项公式的几种方

由递推公式求通项公式的常用方法 由数列的递推公式求通项公式是高中数学的重点问题,也是难点问题,它是历年高考命题的热点题。对于递推公式确定的数列的求解,通常可以通过递推公式的变换,转化为等差数列或等比数列问题,有时也用到一些特殊的转化方法与特殊数列。 方法一:累加法 形如a n +1-a n =f (n )(n =2,3,4,…),且f (1)+f (2)+…+f (n -1)可求,则用累加法求a n 。有时若不能直接用,可变形成这种形式,然后利用这种方法求解。 例1:(07年北京理工农医类)已知数列{a n }中,a 1=2,a n +1=a n +cn (c 是常数,n =1,2,3,…)且a 1,a 2,a 3成公比不为1的等比数列 (1)求c 的值 (2)求{a n }的通项公式 解:(1)a1,a2,a3成公比不为1的等比数列 2 022)2(2)() ,3,2,1(111113 12 2===++?=+∴=+=?=∴+c c a c c a a c a n cn a a a a a n n 因此(舍去)或解得又 (2)由(1)知n a a n a a n n n n 2,211=-+=++即,将n =1,2, …,n -1,分别代入 ) 1(2322 2121342312-=-?=-?=-?=--n a a a a a a a a n n 将上面n -1个式子相加得a n -a 1=2(1+2+3+…+n -1)=n 2 -n 又a 1=2,a n =n 2 -n +2 方法二:累乘法 形如 a n +1 a n =g (n )(n =2,3,4…),且f (1)f(2)…f (n -1)可求,则用累乘法求a n .有时若不能直接用,可变形成这种形式,然后用这种方法求解。

汉诺塔问题实验报告

1.实验目的: 通过本实验,掌握复杂性问题的分析方法,了解汉诺塔游戏的时间复杂性和空间复杂性。 2.问题描述: 汉诺塔问题来自一个古老的传说:在世界刚被创建的时候有一座钻石宝塔(塔A),其上有64个金碟。所有碟子按从大到小的次序从塔底堆放至塔顶。紧挨着这座塔有另外两个钻石宝塔(塔B和塔C)。从世界创始之日起,婆罗门的牧师们就一直在试图把塔A 上的碟子移动到塔C上去,其间借助于塔B的帮助。每次只能移动一个碟子,任何时候都不能把一个碟子放在比它小的碟子上面。当牧师们完成任务时,世界末日也就到了。 3.算法设计思想: 对于汉诺塔问题的求解,可以通过以下三个步骤实现: (1)将塔A上的n-1个碟子借助塔C先移到塔B上。 (2)把塔A上剩下的一个碟子移到塔C上。 (3)将n-1个碟子从塔B借助于塔A移到塔C上。 4.实验步骤: 1.用c++ 或c语言设计实现汉诺塔游戏; 2.让盘子数从2 开始到7进行实验,记录程序运行时间和递 归调用次数; 3.画出盘子数n和运行时间t 、递归调用次数m的关系图, 并进行分析。 5.代码设计: Hanio.cpp #include"stdafx.h" #include #include #include void hanoi(int n,char x,char y,char z) { if(n==1) { printf("从%c->搬到%c\n",x,z); } else { hanoi(n-1,x,z,y); printf("从%c->%c搬到\n",x,z); hanoi(n-1,y,x,z); }

已知数列递推公式求通项公式的几种方法

已知数列递推公式求通项公式的几种方法 Revised on November 25, 2020

求数列通项公式的方法 一、公式法 例1 已知数列{}n a 满足1232n n n a a +=+?,12a =,求数列{}n a 的通项公式。 解:1232n n n a a +=+?两边除以12n +,得 113222n n n n a a ++=+,则11 3 222 n n n n a a ++-=,故数列{}2n n a 是以1222 a 1 1==为首项,以23 为公差的等差数列,由等差数列的通项公式,得31(1)22n n a n =+-,所以数列{}n a 的通项公式为31()222n n a n =-。 评注:本题解题的关键是把递推关系式1232n n n a a +=+?转化为 11 3 222 n n n n a a ++-=,说明数列{}2 n n a 是等差数列,再直接利用等差数列的通项公式求出3 1(1) 22n n a n =+-,进而求出数列{}n a 的通项公式。 二、累加法 例2 已知数列{}n a 满足11211n n a a n a +=++=,,求数列{}n a 的通项公式。 解:由121n n a a n +=++得121n n a a n +-=+则 所以数列{}n a 的通项公式为2n a n =。 评注:本题解题的关键是把递推关系式121n n a a n +=++转化为 121n n a a n +-=+,进而求出11232211()()()()n n n n a a a a a a a a a ----+-+ +-+-+, 即得数列{}n a 的通项公式。 例3 已知数列{}n a 满足112313n n n a a a +=+?+=,,求数列{}n a 的通项公式。 解:由1231n n n a a +=+?+得1231n n n a a +-=?+则 所以3 1.n n a n =+-

汉诺塔问题的程序实现(hanoi塔)

问题重述: 有三根柱A、B、C,在柱A上有N块盘片,所有盘片都是大的在下面,小片能放在大片上面。现要将A上的N块盘片移到C柱上,每次只能移动一片,而且在同一根柱子上必须保持上面的盘片比下面的盘片小,输入任意的N,输出移动方法。 (注意:这是一个古老的传说,传说是如果把64个盘子由A柱移到了C柱的话,那么世界末日就到了,事实上如果要把64个盘子从A柱移到C柱的话,即使用计算机运算,也要计算数亿年,所以这个预言未必不是真实。) 【分析】 我们可以这样考虑,当n=1时,我们只要直接将A柱的盘子移到C柱,当n>1时,我们可以先把n-1个盘子由A柱通过C柱移到B柱,此时就可以把A柱剩下的最后一个盘子直接移到C柱,这样接下来只要把n-1个盘子通过A柱移到C 柱即可,如果就构成了递归的思路,我们可以定义个移动过程mov(n,a,b,c)表示将n个盘子从a通过b移到c 1.只要求输出搬运的次数 #include using namespace std; int m=0; void move() { m++; } void I(int n) { if(n==1) move(); else { I(n-1); move(); I(n-1); } } int main() { I(3); cout< using namespace std;

int fact(int n) { if(n==1) return(1); else return((2*fact(n-1)+1)); } int main() { cout< using namespace std; int m=0; void Move(int n,char x,char y) { cout<<"把"<>i; Hannoi(3,'a','b','c'); cout<<"总的搬运次数"<

相关文档
最新文档