递归(recursion):递归常被用来描述以自相似方法重复事物的过程,在数学和计算机科学中,指的是在函数定义中使用函数自身的方法。(A调用A)
1.递归在函数中的具体形式:
(1)必须明确终止条件,并给出终止时的处理
(2)必须有间接或直接调用自身解决小规模问题的步骤
def recursion(大规模问题):
if end_condition: #终止条件
end #终止的处理
else:
recursion(小规模子问题) #调用自身
2.递归的应用:
(1)问题的定义是按递归定义的(Fibonacci函数,阶乘,…);
(2) 问题的解法是递归的(有些问题只能使用递归方法来解决,例如,汉诺塔问题,…);
(3) 数据结构是递归的(链表、树等的操作,包括树的遍历,树的深度,…)
3.递归的优缺点
(1)递归的优点:简洁,容易处理问题,代码可读性高
(2)时间和空间消耗大
迭代(iteration):重复反馈过程的活动,每一次迭代的结果会作为下一次迭代的初始值。(A重复调用B)
1.迭代在程序中的表示:
(1)必须设置计数器,可以通过计数设置或条件设置,否则会一直迭代
(2)必须有返回值可以作为再次迭代的初值
def iteration(A):
return B
C
for i in range(n):
C=interation(C)
2.迭代的优缺点
(1)优点:代码效率高,时间空间消耗比递归小
(2)缺点:不够简洁,容易混淆
递归是一个树结构,从字面可以其理解为重复“递推”和“回归”的过程,当“递推”到达底部时就会开始“回归”,其过程相当于树的深度优先遍历。
迭代是一个环结构,从初始状态开始,每次迭代都遍历这个环,并更新状态,多次迭代直到到达结束状态。
迭代计算n!
int calculate(int n){
int result = 1;
for(int i = 2; i <= n; i++){
result *= i;
}
}
递归计算n!
int recursion(int n){
if(n <= 1){
return 1;
}
return n * calculate(n - 1);
}
结论:
迭代和递归
(1)迭代:函数内某段代码实现循环,函数调用时使用前一次循环的返回值作为初始值,A调用B,使5用计数器结束循环
(2)递归:重复调用自身实现循环,A调用A,设置结束条件
(3)递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换.能用迭代的不用递归,