几道经典递归算法案例

article/2025/10/7 6:15:17

一)递归介绍

定义:

1、在函数体中直接或间接的调用自身的一种方法。

2、必须要有边界值,也就是停止的条件。

头递归函数调用时不是传递本次计算的结果,而是把当前的调用状态传递,相当于要一直记录上一次函数的调用状态。这种方式会耗内存资源,当计算的值较大,递归层次较深时,容易报内存错误。

尾递归函数调用时传递本次计算的结果,不需要记录函数的调用状态,由于一直是在尾部计算,大大减少了资源占用。

备注:递归也不是能无限计算下去的,只要是计算,就会有计算瓶颈限制。如果要一直计算,递归和死循环就差不多了。

二)递归案例

(一)计算球的反弹高度和总路径?

描述:一个球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

普通方式:h代表初始高度,n代表反弹次数

public static double fn(double h, int n) {if (h<=0 || n<=0) {return 0;}double sum = 0;while (n>0) {sum += h;h = h/2;n--;}return sum;
}

 

尾递归方式(该案例不适合用头递归):

h代表初始高度,n代表反弹次数(如需计算第10次总高度,n=11,因为每次是先减1,再求和),sum表示总共的高度。

// h代表初始高度,n代表反弹次数(如需计算第10次总高度,n=11,因为每次是先减1,再求和),sum表示总共的高度
public static double fn(double h, int n, double sum) {if (h<=0 || n<=0) {return 0;}if (n <= 1) {return sum;}return fn(h/2, n-1, sum + h);
}

计算并分解的步骤如下:

高度                  次数    总共米数

fn(100,              10,      0)

fn(50.0,              9,       100.0)

fn(25.0,              8,       150.0)

fn(12.5,              7,       175.0)

fn(6.25,              6,        187.5)

fn(3.125,            5,        193.75)

fn(1.5625,          4,        196.875)

fn(0.78125,        3,        198.4375)

fn(0.390625,      2,        199.21875)

fn(0.1953125,    1,        199.609375)

总共经过199.609375米,第10次反弹高度为0.1953125

 

(二)阶乘计算

描述:计算从1到n每个数相乘的结果。公式:1*2*3*4*......*n的结果。

普通方式:

public static int fn(int n) {int sum = 1;for(int i=1; i<n; i++) {sum = sum * (i+1);}return sum;
}

 

头递归方式:

public static int fn(int n) {return n==0 ? 1 : n * fn(n-1);
}

假设n=5,计算并分解的步骤如下:

fn(5)

{5 * fn(5-1)}

{5 * {4 * fn(4-1)}}

{5 * {4 * {3 * fn(3-1)}}}

{5 * {4 * {3 * {2 * fn(2-1)}}}}

{5 * {4 * {3 * {2 * {1 * fn(1-1)}}}}}

{5 * {4 * {3 * {2 * {1 * 1}}}}}

{5 * {4 * {3 * {2 * 1}}}}

{5 * {4 * {3 * 2}}}

{5 * {4 * 6}}

{5 * 24}

{120}

结果返回120

 

尾递归方式:

public static int fn(int n, int sum) {return n == 0 ? sum : fn(n-1, n*sum);
}

假设n=5,sum初始为1(如果是阶加,初始为0)

计算并分解的步骤如下:

fn(5, 1)

fn(4, 5)

fn(3, 20)

fn(2, 60)

fn(1, 120)

结果返回sum=120

 

(三)斐波那契数列

描述:斐波那契数列,数列为1,1,2,3,5,8,13,21......n,每一个数是前面两个数之和,计算第n个数是多少。

普通方式:

public static int fn(int n) {int a = 1;int b = 1;int num = 0;for (int i=2; i<n; i++) {num = a+b;a = b;b = num;}return num;
}

 

头递归方式:

public static int fn(int n) {return n<=2 ? 1 : fn(n-1) + fn(n-2);
}

假设n=6,计算并分解的步骤如下:

fn(6)

{fn(5) + fn(4)}

{fn(4) + fn(3) + {fn(3) + fn(2)}

{fn(3) + fn(2) + fn(2) + fn(1) + fn(2) + fn(1) + 1}

{fn(2) + fn(1) + 1 + 1 + 1 +1 + 1 + 1}

{1+ 1 + 1 + 1 + 1 +1 + 1 + 1}

第6个数结果为:8

 

尾递归方式:

// 写法一:假设n等8, n = fn1(8, 1, 1);
public static int fn1(int n, int num1, int num2) {return n == 1 ? num1 : fn1(n - 1, num2, num1 + num2);
}// 写法二:假设n等8, n = fn2(1, 1, 8);
public static int fn2(int first, int second, int n) {return n < 3 ? second : fn2(second, first + second, n - 1);
}

假设n=6,计算并分解的步骤如下:

fn2(1, 1, 6)

fn2(1, 2, 5)

fn2(2, 3, 4)

fn2(3, 5, 3)

fn2(5, 8, 2)

第6个数结果为:8

 

识别二维码关注个人微信公众号

本章完结,待续,欢迎转载!
 
本文说明:该文章属于原创,如需转载,请标明文章转载来源!


http://chatgpt.dhexx.cn/article/eda0BQJI.shtml

相关文章

【函数递归】简单递归的5个经典例子,你都会吗?

&#x1f9f8;&#x1f9f8;&#x1f9f8;各位巨佬大家好&#xff0c;我是猪皮兄弟&#x1f9f8;&#x1f9f8;&#x1f9f8; 今天和大家谈谈简单递归&#x1f973;&#x1f973;&#x1f973; &#x1f692;什么是递归 递归的定义&#xff1a; 递归是一种解决问题的有效方…

四个超好用的优质资源搜索网站,海量优质资源等你发现!

在网上找资源的时候总找不到满意的优质资源&#xff1f;今天小编把办公室大佬珍藏多年的四个超好用优质资源搜索网站分享给你&#xff0c;只要你想找&#xff0c;没有找不到的资源&#xff01; 一&#xff0c;学习资料库 学习资料库中有大量的免费学习资料&#xff0c;学习资料…

珍藏多年的技术资源搜索网站——程序员必备

程序员经常需要找一些技术书籍和相关文档&#xff0c;但是通过百度查找往往都是需要各种积分才能够下载&#xff0c;笔者平时的学习中积累几个搜索工具网站&#xff0c;基本上所有需要的技术文档&#xff0c;经典书籍&#xff0c;学习资料&#xff0c;学习视频等等都可以在下列…

在百度上搜不到的资源是在哪找的?就在这些强大的资源搜索网站呀

都说又不懂的问“度娘”最快&#xff0c;但是也有一些东西是在“度娘”哪里也找不到的。那些在百度上搜不到的资源是在哪找的呢&#xff1f;就在这些强大的资源搜索网站呀~ 1.茶杯狐 茶杯狐&#xff0c;它的资源搜索功能很成熟&#xff0c;这里收集了海量的资源可以免费下载&a…

黑科技之资源搜索网站

欢迎加入BIM行业开发交流1群 群号:711844216 一、背景 大家经常会有搜索视频&#xff0c;音乐&#xff0c;PDF&#xff0c;APP等资源的需求&#xff0c;然而通过现有搜索引擎不是很方便找到自己想要的东西&#xff0c;这里笔者推荐几个不错的免费网站&#xff0c;基本上用起来…

超好用的云盘资源搜索网站

超好用的云盘资源搜索网站 云盘资源搜索云云搜索搜百度盘盘搜搜万盘搜索爱挖盘盘搜我的盘 云盘资源搜索 想要的资源轻轻松松一键搞定&#xff0c;让工作生活更轻松。 注*本分享仅供学习参考 云云搜索 http://www.yunyunso.com 搜百度盘 http://www.sobaidupan.com 盘搜…

网盘资源搜索网站

本篇博客总结了百度网盘常用的资源搜索网站。 1.盘搜搜 盘搜搜支持百度云搜索、115网盘、360云盘、华为网盘、新浪微盘等搜索服务&#xff0c;是您工作、学习、娱乐的网盘搜索神器 2.如风搜 如风搜&#xff0c;全网网盘搜索工具。是您工作、学习、娱乐的好助手。找好资源&…

6个超级实用的免费网盘搜索网站分享

因为各种原因&#xff0c;多数网盘搜索网站“寿命”都很短&#xff0c;也有很多百度网盘搜索站点都提高了使用门槛&#xff08;比如付费才能使用&#xff09;。 分享几个自己认为搜索的资料蛮全&#xff0c;到现在&#xff08;2021年&#xff09;为止还能使用的网盘搜索网站。…

我珍藏很久的网盘资源搜索网站和下载神器

摘要&#xff1a;分享几个网盘资源搜索网站和下载神器。 这是「每周分享」的第 17 期。最近有不少新朋友关注&#xff0c;所在再介绍一下这个栏目&#xff0c;每个周末分享一篇 Python 以外的文章&#xff0c;主题涉及&#xff1a;软件、App、PPT、Ps 等几个方面。往期内容你可…

强烈推荐,7个资源搜索网站,从此告别资源付费

前言 周末软件测试自学群很多小伙伴问我&#xff1a;你有啥好的学习资源或者网站没&#xff1f;分享一下可以吗&#xff1f;虽然在国庆期间我整理过&#xff0c;但是趁着周末又给大家整理了一波&#xff0c;完善了不少学习资源&#xff0c;走起~~ 脚本之家 资源很多&#xf…

12款精品网盘资源搜索网站,只有你想不到没有它搜不到的

目录 1.前言 2.网站介绍 3.使用评价 12款精品网盘资源搜索网站&#xff0c;只有你想不到没有它搜不到的 1.前言 今天呢给大家分享几款网盘资源搜索网站&#xff0c;比如盘搜搜、盘盘搜、茶杯狐等&#xff0c;都是非常老牌的网盘资源搜索网站&#xff0c;里面资源丰富且全…

7个资源丰富到爆的搜索网站,没有你找不到的资源!

闲话就不多说了&#xff0c;直接上干货&#xff0c;希望能够帮助到大家&#xff01; IMDB IMDB是互联网电影数据库网站。它包含了所有的电影、电视的内容。如果说豆瓣是国内经常使用的&#xff0c;那么在豆瓣上看不到的东西&#xff0c;使用IMDB就可以查到了。可以使用它来查询…

3个超实用的资源搜索网站,有了它们,再也没有你找不到的资源!

还在为找不到自己需要的资源而烦恼&#xff1f;别烦恼啦~快来看看这3个超实用的资源搜索网站&#xff0c;有了它们&#xff0c;再也没有你找不到的资源&#xff01; 1.BT搜 BT搜&#xff0c;这个网站虽然看起来比较简单&#xff0c;但是却有很多非常实用的资源&#xff0c;没有…

还在用百度找资源?试试这3个顶级资源搜索网站,没有找不到的!

资源搜索是工作和学习的日常&#xff0c;相信很多人都喜欢用百度去搜索&#xff0c;虽然百度很强大&#xff0c;但是毕竟资源有限&#xff0c;今天再给大家分享3个顶级资源搜索网站&#xff0c;视频、音乐、图片等应有尽有&#xff0c;没有你找不到的哦。 1.虫部落 一个解决稀…

使用阿里云开放搜索服务快速搭建资源搜索网站

下面我们就一步一步来搭建这个简单的资源搜索网站 一、搭建前的一些准备和分析 资源搜索网站有如下几个关键点&#xff1a; 1、原始数据 没有个几百万条初始搜索数据&#xff0c;都不好意思和别人说是做资源站的&#xff0c;在这个案例里面&#xff0c;我们采用了simplecd官…

5个在线资源搜索网站,用的人求生欲很强!

分享5个平时经常用的在线资源搜索网站&#xff0c;只有你想不到没有你找不到的资源&#xff01;一起来了解下吧&#xff01; 西林街搜索http://www.xilinjie.com/ 强烈推荐的资源搜索网站&#xff1a;视频、文库&#xff08;文档、古籍、专业书籍、电子书[PDF、ePub、Mobi等格…

5个超厉害的资源搜索网站,每一款都可以让你的资源满满!

生活中我们无时不刻不都要在网站搜索资源&#xff0c;但就是缺少一个趁手的资源搜索网站&#xff0c;如果有一个比较好的资源搜索网站可以帮助我们节省一大半时间&#xff01;今天小编在这里为大家分享5款超厉害的资源搜索网站&#xff0c;每一款都可以让你的资源丰富精彩&…

7个常用资源搜索网站推荐

说起搜索资源&#xff0c;大家肯定先想到百度&#xff0c;的确“度娘”很万能&#xff0c;能帮我们解决很多问题&#xff0c;但毕竟百度资源有限&#xff0c;用的人多了就造成重复的问题&#xff0c;接下来&#xff0c;小编给大家分享7个顶级资源搜索网站&#xff0c;能满足你很…

推荐3个搜索资源的网站,保存起来,用的时候方便找哦

互联网是一个自由分享的世界&#xff0c;但一旦真想找点资源又不容易找&#xff0c;一方面是现在有违规资源会被封&#xff0c;一方面信息时代信息爆炸&#xff0c;很难快速找到想要的内容。 今天分享3个网站&#xff0c;都可以搜索资源&#xff0c;是资源搜索的入口。 找到了…

免费分享6个资源搜索网站,不怕资源搜不到,没多少人知道这些

1、西林街搜索 西林街搜索&#xff0c;这个网站专注于盘类资源搜索&#xff0c;可以搜索各种文库、学术资料、视频、教程、音乐等&#xff0c;网站整体看起来十分简洁&#xff0c;而且主页的背景图片也会隔段时间自动更换。 网站链接↑↑↑ http://www.xilinjie.com/ 2、呆木瓜…