起源

一直感觉递归蛮绕,所以想学习下

例子

查看资料,大部分讲递归都用到斐波那契数列,那我也用这个例子吧,公式是F(n) = F(n-1) + F(n-2)

树图

解释

执行流程

如图所示,这是整个执行流程,每一个结点头上都有一个数字代表是第几次调用F函数,聪明的小伙伴已经看出来这个是二叉树的先序遍历(根,左,右),不难看出,只有在叶子节点(没有子节点的节点)上才返回值,也就是F(0)和F(1),返回了5个F(1)和3个F(0),所以结果是5

返回流程

那么具体是怎么返回的呢,当执行到第5个节点时 F(1)返回了1,然后等待第6个节点F(0)一起做运算
F(1) + F(0),并且返回给F(2)
, 那么此时第四个F(2)节点已经有值了,但是他并不能返回,因为他要等第7个节点的值 一起做公式运算 F(2)+F(1),其他节点依次类推,然后一直到返回到根节点F(5)

代码演示

代码

public class Test3 {// F()函数一共执行的次数,和上面的树节点个数对应static int count = 0;public static void main(String[] args) {F(5);System.out.println("一共执行F()次数:" + count);}public static int F(int n) {count++;System.out.println("进来的是===" + n);/** 小于0是为了 避免初始 n 为负数* 等于0是为了考虑边界情况* */if (n <= 0) {return 0;}if (n == 1) {return 1;}return F(n - 1) + F(n - 2);}}

结果

总结

递归函数一般分成两个部分,一个是边界处理,一个是公式,边界处理就是 那些对应的返回具体值的部分,对应上面的是两个if语句,公式就是两个数之间存在什么关系,用一个公式表示出来,然后如上面的树图所示,一直先序遍历到叶子节点,然后才返回值,最后所有叶子节点返回的总和(这个例子是总和,其他的如阶乘就不是了,总之就是叶子节点做一些运算返回给各自的根节点,然后一直返回到根节点)就是要求的F(n)。

关于递归树的理解和学习相关推荐

  1. 算法学习笔记16:递归树

    递归树:如何借助树来求解递归算法的时间复杂度 今天,我们来讲这种数据结构的一种特殊应用,递归树. 我们都知道,递归代码的时间复杂度分析起来很麻烦.我们在<排序>那里讲过,如何利用递推公式, ...

  2. 【树模型与集成学习】(task4)两种并行集成的树模型

    学习总结 (1)随机森林中的随机主要来自三个方面: 其一为bootstrap抽样导致的训练集随机性, 其二为每个节点随机选取特征子集进行不纯度计算的随机性, 其三为当使用随机分割点选取时产生的随机性( ...

  3. 【组队学习】【30期】6. 树模型与集成学习

    树模型与集成学习 航路开辟者:耿远昊 领航员:姜萌 航海士:耿远昊 基本信息 开源内容:https://github.com/datawhalechina/machine-learning-toy-c ...

  4. 从Image Caption Generation理解深度学习

    作者:李理 from: http://geek.csdn.net/news/detail/97193 Part I 从Image Caption Generation理解深度学习(1) 0. 前面的话 ...

  5. 看动画学算法之:递归和递归树

    文章目录 简介 递归树和阶乘 斐波那契数列 GCD最大公约数 N中选K 0-1背包问题 硬币找零问题 数组的最长递增子序列 旅行商问题 简介 在之前我们介绍的很多数据结构和算法都用到了递归,递归非常容 ...

  6. 一份帮助你更好地理解深度学习的资源清单

    摘要: 深度学习朝着可解释的方向发展,理解背后的基本原理显得更加重要.本文是一份帮助读者更好地理解深度学习基本过程的清单,便于初学者和部分起步者针对性地补充自己的知识体系. 人工智能和深度学习太火了, ...

  7. 收藏 | 一文带你深入理解深度学习最新进展

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 本文整合自机器之心.网络资源 AI博士笔记系列推荐 周志华<机 ...

  8. 一份帮助你更好地理解深度学习的资源清单 1

    摘要: 深度学习朝着可解释的方向发展,理解背后的基本原理显得更加重要.本文是一份帮助读者更好地理解深度学习基本过程的清单,便于初学者和部分起步者针对性地补充自己的知识体系. 人工智能和深度学习太火了, ...

  9. 0基础怎样理解深度学习的工作原理?做个票价预测工具就懂了

    原作:Radu Raice 安妮 编译自 Medium 量子位 出品 | 公众号 QbitAI 这篇文章颇!具!人!气! 软件工程专业的学生Radu Raice近日发表了文章<Want to k ...

最新文章

  1. 猫脸关键点检测大赛:三种方法,轻松实现猫脸识别!
  2. 【开发环境】Windows 安装 PyCharm 开发环境 ( 下载 PyCharm | 安装 PyCharm | 在 PyCharm 中创建 Python 工程 )
  3. 11-Memory Management Examples
  4. Ctrl+Alt组合键在VMware虚拟机中如何使用
  5. WEB前端 vue学习 vue-router讲解router.push
  6. Google 发布全中文机器学习速成课,曾内部培训过 1.8 万人!
  7. 计算机ppt教案设计大赛,广东省创新杯说课大赛计算机类一等奖作品:PPT电子相册制作教学设计...
  8. 被反爬虫搞到心态崩溃
  9. android矢量图
  10. win10怎么添加打印机
  11. 如何缓解眼疲劳(眼疲劳敷眼睛是热敷还是冷敷)
  12. 《大话数据结构》参考
  13. 7. 重磅硬核 | 一文聊透对象在JVM中的内存布局,以及内存对齐和压缩指针的原理及应用
  14. CUDA+ GTX1050ti电脑配置
  15. 数字身份的万亿市场之争才刚开始
  16. 处处吻(粤语汉字英译)
  17. 基本统计值的计算(平均值,中位数,方差)
  18. ​iPhone 14 Pro 全系降价 700 元;Gmail 之父:有了 ChatGPT,搜索引擎活不过两年了|极客头条...
  19. 微型计算机的性能主要取决于什么,微型计算机的性能主要取决于什么?
  20. [转]Sqlite中文排序研究

热门文章

  1. windows10装ubuntu16.04双系统完全版教程!!
  2. ubuntu 小技巧
  3. 博鳌页面html,天堂小镇---博鳌
  4. git的基本使用流程演示
  5. jmeter使用汇总
  6. 腾讯:微信号能修改,微信帐号不允许修改
  7. kaggle_泰坦尼克实战入门
  8. react项目实战-好客租房
  9. 一道很烧脑的面试题?在Android中能否用CPU代替GPU?
  10. Java学习之多态一