算法--递归与分治

算法-chapter2递归与分治-概述这里是@嘉禾何鹤的第一篇学习笔记文章目录这里是@嘉禾何鹤的第一篇学习笔记前言递归一、What is 递归?二、递归分类三、能够用递归解决的问题分治能够用分治解决的问题分治法的求解过程分治法的一般的算法设计模式这是一张图文无关的 彩蛋?前言决心当一名程序员的第一个月过去啦,得弊于大一C基础打得着实不够扎实,第一门专业课就给自己来了当头一棒,不能像别的科目靠手写笔记来总结啦,试着尝试一种新的方式,同样的手过千遍,下面就开始啦!递归一、What is 递归?
摘要由CSDN通过智能技术生成

这里是@嘉禾何鹤的第一篇学习笔记


前言

决心当一名程序员的第一个月过去啦,得弊于大一C基础打得着实不够扎实,第一门专业课就给自己来了当头一棒,不能像别的科目靠手写笔记来总结啦,试着尝试一种新的方式,同样的手过千遍,下面就开始啦!


一、递归

What is 递归?

依稀记得在程序设计基础中绝对学到过,但是脑子就是没有整个代码的框架。还是从最简单的数学角度先来理解吧。

等差、等比数列的推到应该是自己最先想到,且最容易理解到的递归的应用了。将目前的解带到同一过程的下一步骤中去,不断地重复迭代,以求得最终的解的过程啦。还是用概括解释的不太清楚,不过自己明白就好啦。

迁移到程序当中,就是在定义一个过程或者函数时出现调用本过程或者本函数的成分(搬用的老师PPT)

递归分类

若调用自身,称之为直接递归。
若过程或函数p调用过程或函数q,而q又调用p,称之为间接
递归。
任何间接递归都可以等价地转换为直接递归。调用在内部实现时,并不是每次调用真的去复制。一个复制件存放到内存中,而是采用代码共享的方式,也就是它们都是调用同一个函数的代码,而系统为每一次调用开辟一组存储单元,用来存放本次调用的返回地址以及被中断的函数的参量值。

能够用递归解决的问题

(1)需要解决的问题可以转化为一个或多个子问题来求
解,而这些子问题的求解方法与原问题完全相同,只是在
数量规模上不同;
(2)递归调用的次数必须是有限的;
(3)必须有结束递归的条件(递归基)来终止递归。

二、分治

能够用分治解决的问题

(1)该问题的规模缩小到一定的程度就可以容易地解决。
(2)该问题可以分解为若干个规模较小的相同问题。
(3)利用该问题分解出的子问题的解可以合并为该问题
的解。
(4)该问题所分解出的各个子问题是相互独立的,即子
问题之间不包含公共的子问题。

分治法的求解过程

① 分解:将原问题分解为若干个规模较小,相互独立,
与原问题形式相同的子问题。
② 求解子问题:若子问题规模较小而容易被解决则直
接求解,否则递归地求解各个子问题。
③ 合并:将各个子问题的解合并为原问题的解。

分治法的一般的算法设计模式

divide-and-conquer(P) { 
 if |P|≤n0 return adhoc(P); // 返回递归基 
 将P分解为较小的子问题 P1,P2,…,Pk; 
 for(i=1;i<=k;i++) //循环处理k次 yi=divide-and-conquer(Pi); //递归解决Pi 
 return merge(y1,y2,,yk); //合并子问题 }

三、这是一张图文无关的 彩蛋?

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值