当前位置: 首页 > news >正文

营销型的网站/seo零基础教学视频

营销型的网站,seo零基础教学视频,个人网站源代码下载,网站建设一般多钱关注公众号回复 数据结构 送精心准备资料一份!目录递归介绍递归求阶乘递归求斐波那契递归解决汉诺塔总结递归介绍递归:就是函数自己调用自己。子问题须与原始问题为同样的事,或者更为简单;递归通常可以简单的处理子问题&#xff0…

 关注公众号回复 数据结构 送精心准备资料一份

目录

  • 递归介绍

  • 递归求阶乘

  • 递归求斐波那契

  • 递归解决汉诺塔

  • 总结

递归介绍

递归:就是函数自己调用自己。子问题须与原始问题为同样的事,或者更为简单;
递归通常可以简单的处理子问题,但是不一定是最好的。6e16141da94a623618faa1e015be081e.gif
对于递归要分清以下概念:

  • 自己调用自己

  • 递归通常不在意具体操作,只关心初始条件上下层的变化关系

  • 递归函数需要有临界停止点,即递归不能无限制的执行下去。通常这个点为必须经过的一个数。

  • 递归通常能被其他方案替代(栈、数组正向求)。

认识递归,递归函数通常简易但是对于初学者可能很难取理解它。拿一个递归函数来说。

static void digui()
{
System.out.println("bigsai前");
digui();
System.out.println("bigsai后");
}

是一个递归吧?不是正常递归没有结束条件,自己一致调用自己死循环
那正确的递归应该这样

static void digui(int time)
{
if(time==0) {}//time==0不执行
else {
System.out.println("bigsai前time: "+time);
digui(time-1);
System.out.println("bigsai后time: "+time);
}
}

对于这样一种递归,它的执行流程大致是这样的9ab020c785444bdd5e03f8a1231966e9.png
所以,调用dugui(5)在控制台输出是这样的5f34fbea6c6d8a916ff9e5727100b8b4.png
那么,我想你对递归函数执行的流程应该有所了解了吧。

递归求阶乘

求 n!=n*(n-1)*-----*1=n!=n*(n-1)
所以阶乘的上下级的关系很容易找到。我们假设一个函数jiecheng(n)为求阶乘的函数。
这个阶乘,你可以这样命名:

int jiecheng(int n)
{
int va=1;
for(int i=n;i>0;i--)
{
va*=i;
}
return i;
}

但是你还可以简便这样:

static int jiecheng(int n)
{
if(n==0)//0的阶乘为1
{
return 1;
}
else {
return n*jiecheng(n-1);//return n*(n-1)*jiecheng(n-2)=-------
}
}

运行流程为这样

c0401988bc1be95e15f56ac44fbc3e14.gif

递归求斐波那契

按照上述思想,我们假设求斐波那契设成F(n);
首先,斐波那契的公式为:

  • F[n]=F[n-1]+F[n-2](n>=3,F[1]=1,F[2]=1)

  • 也就是除了n=1和2特殊以外,其他均是可以使用递推式。

那么递推实现的代码为:

static long F(int n)
{
if(n==1||n==2) {return 1;}
else {
return F(n-1)+F(n-2);
}
}

其实它的调用流程为:5210ae7ee4e8458ffb138f5f7fa96bbc.gif
当然,其效率虽然不高,可以打表优化,后面可能还会介绍矩阵快速幂优化!

递归解决汉诺塔

汉诺塔是经典递归问题:

相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。

a35929e00eaf753925abf012982800db.png

  1. 如果A只有一个(A->C)

  2. 如果A有两个(A->B),(A->C),(B->C)

  3. 如果A有三个(A->C),(A->B),(C->B),(A->C),(B->A),(B->C),(A->C).

  4. 如果更多,那么将会爆炸式增长。4027b51a761203a0e1f8e1ad05c4f724.gif

可以发现每增加一步,其中的步骤会多很多。但是不妨这样想:

  • 当有1个要从A->C时,且已知移动方式。使用函数表示move(a->c)。同理其他move操作。

  • -------省略中间若干步骤不看,用递归思想看问题

分析:n个从a—>cn-1个a—>c有什么联系?(hannuo(n)—>hannuo(n-1)有啥关系)
假设有n个盘子

  • hannuo(n-1)之后n-1个盘子从A—>C.d0b5849cf99198f583bf39949e847e7c.png

  • 此时剩下底下最大的,只能移动到B,move(A,B)144e885497092d6f0eeede6e6f1b2986.png

  • 那么你是否发现什么眉目了,只需原先的huannuo(n-1)相同操作从C—>B即可完成转移到B;那么我们的之前函数应该写成hannuo(n-1,A,C)但是又用到B,所以把B传进来hannuo(n-1,A,B,C)先表示为从n-1个从A(借助B执行若干操作)转到C。149bd08e93d9ed72a17f5da8840bc1f2.png

  • 这一系列操作使得将n个盘子从A—>B但是我们要的是A—>C才是需要的hannuo(n,A,B,C);那么我们只需要更改下hannuo(n-1,----)顺序就好啦!

经过上面分析,那么完整的操作为:

package 递归;
public class hannuota {
static void move(char a,char b)
{
System.out.println("移动最上层的"+ a+ "到"+ b+ "\t");
}
static void hannuota(int n,char a,char b,char c)//主要分析每一大步对于下一步需要走的。
{
if(n==1) {move(a,c);}//从a移到c
else
{
hannuota(n-1,a,c,b);//将n-1个从a借助c移到b
move(a,c); //将第n(最后一个)从a移到c。
hannuota(n-1,b,a,c);//再将n-1个从b借助a移到c
}
}
public static void main(String[] args)
{

hannuota(5,'a','b','c');
}
}

总结

其实递归在某些场景的效率是很低下的。尤其是斐波那契.从图你就可以发现一个简单的操作有多次重复。因为它的递归调用俩个自己.那么它的递归的膨胀率是指数级别的,重复了大量相同计算。当然这种问题也有优化方案的:

  • 从前往后打表计算,采用类似动态规划的思想。从前往后考虑。比如斐波那契F[n]=F[n-1]+F[n-2];那么我用数组储存。从第三项开始F[3]=F[2]+F[1](均已知),再F[4]=F[3]+F[2]-----这样,时间复杂度是O(N),线性的。

  • 当然,对于阶乘那种递归虽然时间是没有减少,但是如果需要多次访问一个阶乘,那么可以采用同样思想(打表)解决问题。

最后,笔者能力有限,如果有描述不恰当还请指正,感谢前面动态图(未找到原作者)和汉诺塔动图开源作者isea533的开源作品。同时,如果有喜欢学习交流的欢迎关注笔者公众号:bigsai 回复数据结构赠送精美资料一份!1b321287d074754841b59a133263f901.png

推荐阅读:

数据结构与算法—队列(搞懂最常用数据结构之一)

数据结构与算法—栈详解(看完面试考试再也不怕了)

再送10张关于算法的GIF 动图给你,记得查收

一文多图搞懂数据结构的双链表!

数据结构于算法—线性表详解(顺序表、链表)

哪吒票房逼近30亿,从豆瓣短评简单分析人们对哪吒的态度

数据结构与算法—绪论

http://www.lbrq.cn/news/1469683.html

相关文章:

  • 自己做网站的二维码/服务网站排名咨询
  • 白城网站建设/东莞网站优化关键词排名
  • 做网站公证需要费用是多少/黄页引流推广网站软件免费
  • 学做彩票网站有哪些/深圳网站建设方案
  • 建设电子商务网站前的市场分析/百度app手机版
  • 做视频网站视频放在哪里/广告免费发布信息平台
  • 青岛外贸假发网站建设/高清免费观看电视网站
  • 邯郸企业做网站报价/郑州网站seo服务
  • 广州市网站公司/线上广告接单平台
  • 青岛在线制作网站/长沙seo行者seo09
  • 网站是用dw做的吗/品牌全案营销策划
  • 为什么要给企业建设网站/微信营销方式
  • 做企业培训的网站/网络推广服务费
  • 网站制作公司 知乎/友情链接交换平台免费
  • 电商网站策划书/打开百度一下
  • 制作企业网站的app/石家庄seo扣费
  • phpcms v9网站建设入门/磁力天堂最佳搜索引擎入口
  • wordpress 福利源码/六年级下册数学优化设计答案
  • 中英文网站建设费用/做网站用什么软件
  • 张家界做网站的人/日本樱花免m38vcom费vps
  • 长沙网站建设/哪些网站可以seo
  • 高校网站开发/昭通网站seo
  • 如何做网站竞品分析/友情链接交换方式有哪些
  • 免费网站建设制作哪家公司好/百度关键词优化排名
  • 绍兴网站建设哪好/seo模拟点击软件
  • 公司网站要怎么做/有哪些可以免费推广的平台
  • 嘉兴做网站优化哪家好/中国互联网公司排名
  • 深圳市住房和建设委员会网站/外链相册
  • 烟台网站建设开发/百度账号登录入口
  • 营销型网站建设哪个好/seo搜索引擎是什么
  • SH3001六轴传感器应用(二)(IIC驱动开发)
  • 20257月29日-8月2日训练日志
  • springcloud04——网关gateway、熔断器 sentinel
  • 【生活篇】Ubuntu22.04安装网易云客户端
  • 今日矩阵系列
  • [12月考试] E