本文主要是介绍简谈--递推求解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
先来看一个超级简单的例题:
l有5人坐在一起,当问第5个人多少岁,他说比第4个人大2岁,问第4个人多少岁,他说比第3个人大2岁,依此下去,问第一个人多少岁,他说他10岁,最后求第5个人多少岁?
l如果所坐的不是5人而是n人,写出第n个人的年龄表达式?
显然可以得到如下公式 :
F(n)=10(n=1的时候),F(n)=F(n-1)+2 (n>=2的时候)
化简后的公式:
F(n)=10+(n-1)*2
思考:(大家想想这些,要边看边思考哦~~)
递推公式的伟大意义——?
有了公式,人工计算的方法?
常见的编程实现方法?(优缺点?)
太简单了 ?
来个稍微麻烦一些的—
例: 折线分割平面
问题描述:
平面上有n条折线,问这些折线最多能将平面分割成多少块?
样例输入
1
2
样例输出
2
7如何解决?
结论如下:
Zn = 2n ( 2n + 1 ) / 2 + 1 - 2n
= 2 n^2 – n + 1
总结:递推求解的基本方法:
首先确认,是否能很容易的得到简单情况的解
假设规模为N-1的情况已经得到解决
重点分析:当规模扩大到N时,如何枚举出所有的情况,并且要确保对于每一种子情况都能用已经得到的数据解决。
强调:
1、编程中的空间换时间的思想
2、并不一定是从N-1到N的分析
这篇关于简谈--递推求解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!