(1)递归是一种解决问题的方法,它把一个问题分解为越来越小的子问题,直到问题的规模小到可以被很简单直接解决。通常为了达到分解问题的效果,递归过程中要引入一个调用自身的函数。
(2)递归三大定律:
1、递归算法必须有个基本结束条件
2、递归算法必须改变自身状态并向基本结束条件演进
3、递归算法必须递归的调用本身
(3)递归举例,汉罗塔。
一共有3根杆,其中n个圆盘堆叠在其中一根上,每个圆盘比其下的小一点,需要从一根杆转移到另一根上,要求:一次只能移动一个圆盘,不能将大圆盘放在小圆盘之上
解题思路:
a、把圆盘数减一层数的小塔经过目标杆移动到中间杆
b、把剩下的圆盘移动到目标区
c、将圆盘数减一层数的小塔从中间杆移动到目标区
代码如下:
(4)实例:最小硬币数问题:假设你是一家自动售货机制造商的程序员。你的公司正设法在每一笔交易找零时都能提供最少数目的硬币以便工作能更加简单,硬币的面值固定。
递归求解思路:当前需要找的零钱数=min(零钱数-硬币面值)+1
(5)最小硬币问题数问题动态规划解法:
思路:依次计算零钱为0、1、2所需的最小硬币数,并将其存下来,直到计算零钱数为n的硬币数