博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归算法简单介绍
阅读量:6585 次
发布时间:2019-06-24

本文共 1117 字,大约阅读时间需要 3 分钟。

hot3.png

递归

        程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。(来自》)

递归,就是在运行的过程中调用自己。

构成递归需具备的条件:

1. 子问题须与原始问题为同样的事,且更为简单;

2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。

在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。

递归简单应用

有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?用递归算法实现。

 121050377204578.jpg

    可以用循环解释这道题

static int GetAge(int num)        {            int age = 10;            while (num>1)            {                age += 2;                num -= 1;            }            return age;        }

    递归解决问题

static int GetAge(int num){   if (num==1)        return 10;  return GetAge(num-1)+2;}

 141522450645576.jpg

  尾递归

static int GetAge(int num,int acc)        {            if (num == 1)                return acc;            return GetAge(num-1,acc+2);        }

141719242515486.jpg

缺点

一般树状结构的都可以使用递归查询,比如 查询地区,树状的菜单等等,递归比普通的算法耗内存,谨慎使用。还有一种叫作“尾递归”就是把上一个方法的返回值当作参数传给下一个方法,不用像递归再向上返回。

转载于:https://my.oschina.net/zhangyujian/blog/851750

你可能感兴趣的文章
PHP面向对象之方法的重写or重载
查看>>
提取mariadb(mysql) 报错日志并自动邮件上报告警内容
查看>>
linux文件系统扩展属性
查看>>
Apache的ProxyPass简单使用
查看>>
redis.conf参数配置文件详解
查看>>
VMware vSphere中三种磁盘规格(厚置备延迟置零\厚置备置零\Thin Provision
查看>>
超级详细Tcpdump 的用法
查看>>
chmod
查看>>
协议森林
查看>>
认识Hystrix
查看>>
「转」Socks5协议中文文档(RFC1928)
查看>>
紧急公告,Sudo本地提权漏洞
查看>>
1)gitlab+jenkins自动化发布;gitlab搭建
查看>>
嶂石岩一日游
查看>>
跳跃表-原理及Java实现
查看>>
我的友情链接
查看>>
添加@Transactional后获取不到类前的注解
查看>>
Git 常用命令详解(二)
查看>>
Spring数据源的配置:c3p0、dbcp、druid
查看>>
Hibernate 的各种查询
查看>>