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为底。
参考:http://blog.csdn.net/budapest/article/details/6367973

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

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

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

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

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

  1. Java方法递归的简单例题

    目录 递归 1.递归求N 的阶乘和递归求1+2+3+4······+n 2.按顺序打印一个数字的每一位 3.斐波那契数列和青蛙跳台阶问题 4.汉诺塔问题 递归 递归,简单来说,就是方法自己调用自己的过 ...

  2. 算法到底该怎么学?算法数据结构Java编程超全干货!(ACM金牌选手分享超牛学习路径~)...

    怎么才能最快的学习算法呢?(ps:文末附2022大厂面试真题~) 这是很多知友都关心的话题,作为一个ACM金牌选手,根据我的专业角度,特给大家来分享一下! 学习算法,切记不要一上来就开始啃<算法 ...

  3. 【算法数据结构Java实现】Java实现单链表

    1.背景 单链表是最基本的数据结构,仔细看了很久终于搞明白了,差不每个部分,每个链都是node的一个对象.需要两个参数定位:一个是index,表示对象的方位.另一个是node的对象. 2.代码 nod ...

  4. 【算法数据结构Java实现】时间复杂度为O(n)的最大和序列

    1.背景 最大序列和问题一直以来是一个比较经典的算法题,看到这个问题,有很多解题的办法.今天看到了一种时间复杂度只为O(n)的解题算法,在这里记录下. 思路很简单,比方说有P1,P2,P3,P4... ...

  5. 【算法数据结构Java实现】Java实现动态规划(背包问题)

    1.背景      追随着buptwusuopu大神的脚步,最近在研习动态规划.动态规划应该叫一种解决问题的思想,记得又一次去某公司面试就被问到了这个. 多于动态规划的理解,大致是这样的,从空集合开始 ...

  6. 【算法数据结构Java实现】欧几里得算法

    1.背景 欧几里得算法是一个求最大因子的快速算法.如果m,n存在最大因子k,假设m=x*n+r,那么m和n可以整出k的话,r也肯定可以整除k 因为定理:如果M>N,则M mod N<M/2 ...

  7. 数据结构java版之《简单排序》

    本篇文章针对上一篇的数组,实现几个简单的排序功能,并给出实现思路.包括冒泡.选择.插入三种最简单的排序. 1.冒泡排序: ​实现思路图解: public static void sort(int[] ...

  8. 【算法数据结构Java实现】折半查找

    1.背景 以一个题目为例,一个整数x是一组按大小顺序排列好的数列中的一个数,我们要找到x在数列中的索引位置. 比如按从小到大排列的数列: -3,-2,0,4,5,7,12,64 我们要找到数字7的位置 ...

  9. 数据结构和算法(Java),上

    文章目录 第1章 数据结构和算法的概述 数据结构和算法的关系 线性结构和非线性结构 线性结构 非线性结构 第2章 稀疏数组和队列 稀疏数组 案例引入 稀疏数组的基本介绍 应用实例 队列 队列介绍 数组 ...

最新文章

  1. MIME 类型(HttpContext.Response.ContentType)列表
  2. 十二天深入理解计算机系统(一)
  3. java销售_销售转向java编程的开始之路
  4. 淘宝开放API,很不错
  5. echarts改变图例位置
  6. java使用document解析xml文件
  7. DevOps使用教程 华为云(18)git 把单个文件回退到某一版本
  8. Win Server 2012 R2 安装SQL 2016先决条件
  9. 【静夜思】一些抽象代数的核心思想和实际应用
  10. window10安装vnc无法使用,window10安装vnc无法使用的原因和解决办法
  11. 网络流中 InputStream.available() = 0 问题探究
  12. XCode 6.x 越狱 真机调试
  13. oracle水仙花,希腊神话中的水仙花和回声
  14. 【Java】Java基础
  15. 解决fullpage尾屏半屏问题
  16. 计算机睡眠后键盘鼠标无法唤醒,电脑休眠键鼠无法唤醒?解决键盘鼠标无法唤醒电脑待机的问题...
  17. 目录:吴恩达机器学习课后作业
  18. 我决定谈一谈世界上最著名的虫子:BUG !
  19. 勇夺四冠,风行游艇在2022 CCPC专业站中展现超群实力
  20. easyui datagrid 多列checkbox

热门文章

  1. 通信原理随机信号分析
  2. java list wordcount,初试spark java WordCount
  3. eclipse 用jsp文件连接mysql_用本地navicat去连接阿里云ECS中的mysql
  4. mysql utf8mb4 java_mysql中utf8和utf8mb4区别
  5. 使用关中断解决资源冲突问题
  6. 事件标志组的等待与通知
  7. 任务切换的基础:模拟任务切换时寄存器的保存与恢复
  8. java判断邮箱名和文件名_Java公开课|想学好Java,教你操作Java校验文件名和邮箱地址,快来看看...
  9. 网课助手浏览器版怎么更新_MIUI版本更新动态:跨屏协作来袭(第57期)
  10. 华为安卓转鸿蒙,坦白说,华为不用鸿蒙替换安卓,而用HMS替代GMS,是当前最好方案 - 区块网...