,你的任务就是找到最大的和。注意:路径上的每一步只能从一个数走到下一层上和它最近的左边的那个数或者右
i
tdata102102输入I
ti
p102102数字和i
t
whileci
memseti
p0sizeofi
pmemsetdata0sizeofdatafori
ti1i
ifori
tj1jijci
dataijifi1i
pijdataijelsei
pijmaxi
pi1ji
pi1j1dataij2常系数线性齐次递推方程求解例:Fib
acci序列F
F
1F
2F11F21特征方程为xx10,有两个实根:
2
1515,22
f1515通解:f
u12u22,代入
1,
2
解得:u1
放在a1中。如:将
12345,存放在数组a中,就要将1234放在a1中,为此,就要将123放在a2中,以此类推。当
10时,将
放于a中,递归调用结束。例4.写出Ackerma
函数的非递归算法:
1m0akmm
akmm11m≠0
0akmm1akmm
1m≠0
≠0分析:用栈结构实现其非递归的程序。定义栈元素有4项内容:m、m1、
和r;当r为0时,调用akmm
,处理时直接弹栈;当r为1时,调用akmm1akmm
1,此时不弹栈而计算akmm1
,即计算akmm
1。4母函数母函数a0a1xa2x2a3x3a4x4对应数列ai
15
,u2
15
3递归关系递归就是函数直接或间接调用自己,是一种描述问题和解决问题的基本方法。递归有两个基本要素:⑴边界条件:确定递归到何时终止;⑵递归模式:大问题是如何分解为小问题的例1.编写一个递归函数,完成回文的判定。回文是如下形式的对称字符串:”a””abccba””abcdcba”,,。分析:对字符串的长度进行递归处理,当长度为0或1时,结束递归调用。例如,判定字符串”abcdcba”是否是回文。当发现串的首字符和尾字符同是’a’时,问题就变成求字符串”bcdcb”是否是回文,继续求字符串”cdc”是否是回文,……,以此类推。当字符串的长度l1时,递归调用结束。例2.编程递归程序:输入一个自然数,试将其表示成质因数乘积的形式。分析:对要分解的数字m或当前正在尝试的因子
进行递归调用,当m为1时,结束递归调用。递归函数:voidpriNumi
tmi
t
参数m为待分解的数字,参数
为待尝试的因子。m
不为0时,不是m的一个因子,
调用递归函数,继续尝试用
1去分解m;m
为0时,
是m的一个因子,调用递归函数,继续用
去分解m
例3.编写程序,输入一个整数,将其各位上的数按逆序存放在一个数组中。分析:设函数是reversei
tai
t
,其r