递归思想
来源:互联网 发布:兰灯翻墙for mac 编辑:程序博客网 时间:2024/05/19 16:49
一个方法体内调用他自身,被称为方法递归;方法递归包含了一种隐式的循环,他会重复执行某段代码,但这种重复执行无须循环控制;
已知有一个数列:f(0)=1,f(1)=4,f(n+2)=2*f(n+1)+f(n),其中n是大于0的整数,求f(10)的值;
package object;/** * Description:<br> * 功能:递归思想; * @author CJF * */public class Recursive {/** * @param args */public static void main(String[] args) {// TODO 自动生成的方法存根// 输出fn(10)的值System.out.println(new Recursive().fn(10));}// f(0)=1;f(1)=4;fn(n+2)=2*f(n+1)+f(n);public int fn(int n) {if (n == 0) {return 1;} else if (n == 1) {return 4;} else {return 2 * fn(n - 1) + fn(n - 2); // 关键点为这个式子的是如何转换而来}}}
对于fn(10),等于2*fn(9)+fn(8),其中fn(9)又等于2*fn(8)+fn(7).......依次类推,最终会计算到fn(2)=2*fn(1)+fn(0),即fn(2)是可计算的,然后一路反酸回去,就可以最终得到fn(10)的值;
如果将上面数学题改成, 已知有一个数列:f(20)=1,f(21)=4,f(n+2)=2*f(n+1)+f(n),其中n是大于0的整数,求f(10)的值;
则将fn函数改成
// f(20)=1;f(21)=4;fn(n+2)=2*f(n+1)+f(n);public int fn1(int n) {if (n == 0) {return 1;} else if (n == 1) {return 4;} else {return fn(n + 2) - 2 * fn(n + 1);}}
数列递归:
* 如果只知道小的数fn(0),fn(1),
* 则将式子 fn(n+2)=2*fn(n+1)+fn(n) 转换成 fn(n)=2*fn(n-1)+2*fn(n-2)<br>
* 则将式子 fn(n+2)=2*fn(n+1)+fn(n) 转换成 fn(n)=2*fn(n-1)+2*fn(n-2)<br>
*
* 如果只知道大的数fn(20),fn(21),* 则将式子 fn(n+2)=2*fn(n+1)+fn(n) 转换成 fn(n)=fn(n+2)-2*fn(n+1)<br>
*
* 就是当知道大的数,把式子fn(n)移到式子左边,其他两项在右边;
* 当知道小的数,把式子fn(n+2)当成fn(n),其他两项依次将变量数减少2;
0 0
- 递归思想
- 递归思想
- 递归思想
- 递归思想
- 递归思想
- 递归思想
- 递归思想
- 递归思想
- 递归思想
- 递归思想
- 递归思想
- 递归思想
- 递归思想
- 递归思想
- 漫谈递归:递归的思想
- 递归:运用递归思想解题
- 漫谈递归:递归的思想
- 漫谈递归:递归的思想
- 初识程序设计的一点心得
- 攻击带宽已达1T “国家黑客意图搞瘫整个互联网”的说法正在成真
- 黑客又有新高度 一言不合击落卫星
- WiFi的替代者?LiFi来啦!你会用吗?
- JAVA 新特性:流
- 递归思想
- 杭电 Problem 2089 不要62 【数位dp】
- 矩阵快速幂 ZOJ 2853 Evolution
- php程序员遇到职业问题,离职?坚持?
- 一个菜鸟java码农的成长之路(2):迭代器Iterator接口概述
- 一个简单数据库连接池的实现
- c++/sstream/stoi/
- 使用POI操作excel(读取和创建)快速开发指南
- 一个外国网站严肃地统计后发现,中国程序员整体实力世界第一