透过斐波那契数列学习函数递归
来源:互联网 发布:网络歌曲下载 编辑:程序博客网 时间:2024/05/16 02:48
今天看了递归的部分,自己写了个斐波那契,作为学习递归调用的例子。
先看代码:
递归实现
public int fibonacci_DiGui(int number) {if (number == 1 || number == 2) {return 1;} else {return fibonacci_DiGui(number - 1) + fibonacci_DiGui(number - 2);}}
循环实现
public int fibonacci_XunHuan(int n) {int last = 0, current = 0, next;for (int i = 1; i <= n; i++) {if (i == 1) {last = 0;current = 1;} else if (i == 2) {last = 1;current = 1;} else {next = last + current;last = current;current = next;}}return current;}
由上可以得出,斐波那契数列的数学表达式
f(n) = 1 n=1 || n=2f(n) = f(n - 1) + f(n - 2) n > 2
很明显,递归循环都要有一个出口,这里,n为1或者2时为递归的出口。那么更一般的递归模型如下:
f[s1] = m1f[s(n+1)] = g(f[s(i)],f[s(i+1)],f[s(i+2)],...,f[s(n)],c(j),c(j+1),...,c(m))
这里s1和m1都是常量,也是递归出口。第二式的n,i,j,m都是正整数,s(n+1) 是一个待递归的“大问题”,而s(i),s(i+1),s(i+2)都是递归“小问题”,c(j),c(j+1),...,c(m)都是若干个可以直接求解的问题,g是一个非递归函数,可以直接求解。
从上面可以看出,递归就是将一个不能解决或者是不好解决的“大问题”,转换成可解决的“小问题”。且递归分解得保证“大小问题”相似,即求解过程和环境都相似。
0 0
- 透过斐波那契数列学习函数递归
- 斐波那契数列(递归函数)
- 递归-阶乘函数和斐波那契数列
- 6.递归调用 函数 (-斐波那契数列)
- 【好好学习】js递归学习-斐波那契数列
- Python学习笔记 递归-斐波那契数列,汉诺塔
- 斐波那契数列-递归实现
- 递归特例-斐波那契数列
- 斐波那契数列递归源码
- 递归求解斐波那契数列
- 递归-求解斐波那契数列
- 关于斐波那契数列递归
- 斐波那契数列(递归实现)
- 递归和斐波那契数列
- 斐波那契数列(递归)
- 递归之斐波那契数列
- 递归斐波那契数列
- 递归解决斐波那契数列
- 通过telnet的攻击
- 多核和亲和性
- 利用虚拟机virtualbox配置Hadoop开发环境总结
- 关于删除tomcat的应用服务
- 关于Oracle 11g 空表不能exp导出问题
- 透过斐波那契数列学习函数递归
- MVC工作流程
- 利用C指针编写自己的一些数据结构(树)
- jquery文件上传控件 Uploadify
- 黑白相间棋盘
- 黑马程序员-ios学习笔记:self,super
- WEB程序设计之CSS(二)
- 关于Oracle11g的用户默认密码180天的问题
- storm源代码分析之acker工作流程