从Fibonacci出发小谈递归与循环
来源:互联网 发布:网络编程 视频 编辑:程序博客网 时间:2024/04/30 19:20
Fibonacci数列作为经典,以该方法简要看看递归和循环的区别
递归:艺术且直观,往往一个问题具备递归的规律的发觉是一件最核心也是最为考究的问题。
此处Fibonacci直接可表示为 f(n) = f(n-2)+f(n-1) (n>=2)| f(1)=f(0)=1
public static int f(int n){if(n<2)return 1;elsereturn f(n-1)+f(n-2);}循环:理论上来说,所有的递归都可以用循环来实现,但由于递归思想的影响下,许多能轻松想到用递归方法求解的往往在实现循环的时候遇到困难。
此处Fibonacci简单实现为
public static int f2(int n){int result = 0;int a=1,b=1;for(int i=1;i<n;i++){result = a+b;a = b;b = result;}return result; }很显然,循环相较于递归而言缺乏直观性,但单论该两种实现方式而言,实现递归固然简单,但带来的极大堆内存开销及便利时间则是成指数被增长,此时递归时间复杂度为O(n^2),而循环,一个for搞定O(n),通过实验测试
long time1 = System.currentTimeMillis();int result = f(60000);long time2 = System.currentTimeMillis();System.out.println(result+"递归"+(time2-time1));long time3 = System.currentTimeMillis();int result2 = f2(60000);long time4 = System.currentTimeMillis();System.out.println(result2+"循环"+(time4-time3));很显然,用递归要崩溃。
为此特地搜索网上关于递归与循环的评价,贴个知乎链接https://www.zhihu.com/question/20418254
个人认为:具体问题具体分析,如果实在用循环(中间值可以手动保存)解决不了,走递归吧。
0 0
- 从Fibonacci出发小谈递归与循环
- 递归&循环实现Fibonacci数列
- 从fibonacci数列浅谈递归
- 计算Fibonacci数,循环和递归
- fibonacci数列 (递归与非递归)
- 从sicily Fibonacci 问题出发解决矩阵快速幂求解斐波那契问题
- 多线程编程(18) - 再从一个小例子出发
- 循环与递归
- 循环与递归
- 循环与递归
- 关于递归与循环
- 循环与递归
- 递归与循环
- 递归与循环
- 循环与递归
- 递归与循环
- 递归与循环比较
- 循环与递归
- rt2860v2源码解析四
- Executor 框架小结
- Android Volley完全解析(四):带你从源码的角度理解Volley
- 查看CentOS上Apache位置,版本,停止,启动
- 小广告固定,关闭,弹出
- 从Fibonacci出发小谈递归与循环
- 禁止调整ListView 列宽
- 深入学习SSH框架《二:java编程式配置servlet和使用web.xml部署描述符配置servlet》
- windows service宿主web api使用"依赖注入"和“控制反转”的技术实践
- 栈实现之顺序栈——MyArrayStack
- 浏览器工作原理
- java单例设计模式之懒汉模式
- Windows创建大文件
- 基于Ionic2 的移动app开发<2>(从项目的新建到打包)