【算法数据结构Java实现】递归的简单剖析及时间复杂度计算-阿里云开发者社区

开发者社区> 傲海> 正文

【算法数据结构Java实现】递归的简单剖析及时间复杂度计算

简介: 1.理解             对于递归函数的理解,我觉得是比较重要的,因为很多大神能把递归函数用的惟妙惟肖,不光是他们的编程功力高深,更主要是能理解这个算法。比较直白的理解是,如果一个事件的逻辑可以表示成,f(x)=nf(x-1)+o(x)形式,那么就可以用递归的思路来实现。 编写递归逻辑的时候要知道如下法则: 1.要有基准   比如说,f(x)=f(x-1)+1,如果不加入基准,f(0
+关注继续查看

1.理解

            对于递归函数的理解,我觉得是比较重要的,因为很多大神能把递归函数用的惟妙惟肖,不光是他们的编程功力高深,更主要是能理解这个算法。比较直白的理解是,如果一个事件的逻辑可以表示成,f(x)=nf(x-1)+o(x)形式,那么就可以用递归的思路来实现。

编写递归逻辑的时候要知道如下法则:
1.要有基准
  比如说,f(x)=f(x-1)+1,如果不加入基准,f(0)的值是多少,那么函数会无限执行下去,没有意义
2.不断推进
  也就是f(x)=f(x-1)或是f(x)=f(x/n)之类的
          
           
 当然每个递归函数会有一个比较神奇的步骤,就是回溯步骤,比方说:
    
  fact(3) ----- fact(2) ----- fact(1) ------ fact(2) -----fact(3) 
    ------------------------------>  ------------------------------> 
                递归                            回溯 

2.实例实现


      求 的计算和f(x)=0,首先列出公式f(x)=f(x-1)+x/(4**x)     (两个**表示次方,python用惯了),得到下面的代码
public class Recursion {
     public static void main(String args[]){
   
    	  System.out.print(f(2));
  	 }
	   public static double f(int x){
		   if (x==0){
			   return 0;
		   }
		   else{
			   return f(x-1)+x/Math.pow(4,x);
		   }
	   }
}

结果是:f(2)=0.375,验证正确


3.时间复杂度计算


        以上题为例,将f(x)=f(x-1)+x/(4**x)展开,


将f(x)乘以4相减,得,设4的x方等于k,则原式时间复杂度,log以4为底。







/********************************

* 本文来自博客  “李博Garvin“

* 转载请标明出处:http://blog.csdn.net/buptgshengod

******************************************/




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
排序算法大数据量测试代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; using System.Diagnostics; using System.IO; namespace Sort { class Program
829 0
蚂蚁金服核心技术:百亿特征实时推荐算法揭秘
阿里妹导读:本文来自蚂蚁金服人工智能部认知计算组的基础算法团队,文章提出一整套创新算法与架构,通过对TensorFlow底层的弹性改造,解决了在线学习的弹性特征伸缩和稳定性问题,并以GroupLasso和特征在线频次过滤等自研算法优化了模型稀疏性,在支付宝核心推荐业务获得了uvctr的显著提升,并较大地提升了链路效率。
3084 0
任务调度:时间轮算法经典案例解析及应用实现
平时大家的工作中应该会遇到较多需要在某个时间点执行某个任务,比如对运维来说,定时数据库的备份,日志和监控信息的抓取;比如业务系统,某个时间点给某个人群用户发放优惠券,甚至从操作系统角度,人机交互进程、视频播放的实时进程、批处理的后台进程等进程间的调度。。。 所以如何将这些任务高效、精准的调度?是任务调度系统中最重要的命题,当然在业务系统中一个完善的任务调度系统是很复杂的,需要具备能调度、可视化管理、过程可追溯、结果可分析、持久化、高可用等特性,这篇文章主要讨论任务调度逻辑,其余的内容我们后面文章探讨。
114 0
冰与火之歌:「时间」与「空间」复杂度 | 算法必看系列三十六
对于一个算法,其时间复杂度和空间复杂度往往是相互影响的。当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间; 反之,求一个较好的空间复杂度时,可能会使时间复杂度的性能变差,即可能导致占用较长的运行时间。另外,算法的所有性能之间都存在着或多或少的相互影响。因此,当设计一个算法(特别是大型算法)时,要综合考虑算法的各项性能,算法的使用频率,算法处理的数据量的大小,算法描述语言的特性,算法运行的机器系统环境等各方面因素,才能够设计出比较好的算法。
2253 0
计算页面执行时间的两种方法
使用php计算页面执行时间,例如很多查询类的页面都是需要统计页面执行了多少时间, 例如百度谷歌都有查询了多少秒等等,现在提供一种php写的计算方法 /** * 得到当前时间 */ function getMicrotime() { list ($usec, $sec) = expl...
639 0
深入字节码 -- 计算方法执行时间
java程序通过javac编译之后生成文件.class就是字节码集合,正是有这样一种中间码(字节码),使得scala/groovy/clojure等函数语言只用实现一个编译器即可运行在JVM上。
3322 0
图的单源最短路径,Floyd算法(数据结构c++)
这个算法结构很是简单,但是理解还是有一定的困难,一开始做的时候想不明白,跟着算法自己动手画画就知道这个算法具体是怎么回事了。 时间复杂度是O(N*3) 算法有点动态规划的意思,有两个数组,一个(dis[])是记录俩顶点之间的最短路径的长度的,一个[path]数组是记录俩结点的中间结点的。
780 0
+关注
傲海
著有《机器学习实践应用》,阿里云机器学习PAI产品经理,个人微信公众号“凡人机器学习”。
302
文章
10
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载