递归和迭代从本质上看都是循环的一种,递归通过在循环中调用自身,而迭代则通过某段代码实现循环
一般来说:迭代的思想会使问题简单化,但计算过程会十分繁琐,因为参数要通过传递的形式先到达递归条件值,然后再一层一层返回,会占用大量内存,只适用于小型的问题求解。
一、 递归:
它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量
注意 :
-
递归就是在过程或函数里面调用自身;
-
在使用递归时,必须有一个明确的递归结束条件,称为递归出口
执行阶段: 分解 + 回溯
-
递推 :把复杂的问题的求解推到比原问题简单一些的问题的求解;
-
回溯 :当获得最简单的情况(递归出口)后,逐步返回,依次得到复杂的解.
用递归可以解决很多问题:如背包问题,汉诺塔问题,斐波那契数列为:1,1,2,3,5…
通过下面两个例子来看一下执行过程
demo1
def
digun
(
n
)
:
if
n
==
0
:
print
(
''
)
return
else
:
digun
(
n
-
1
)
print
(
"*"
*
n
)
digun
(
5
)
*
**
**
*
**
**
**
**
*
demo2
def
digun
(
n
)
:
if
n
==
0
:
print
(
''
)
return
else
:
print
(
"*"
*
n
)
digun
(
n
-
1
)
digun
(
5
)
**
**
*
**
**
**
*
**
*
二、迭代
迭代与普通循环的区别是:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。
常见的for循环遍历对象就是迭代。
demo3
for
i
in
range
(
1
,
6
)
:
print
(
"*"
*
i
)
*
**
**
*
**
**
**
**
*
demo4
for
i
in
range
(
1
,
6
)
:
print
(
"*"
*
(
6
-
i
)
)
**
**
*
**
**
**
*
**
*