迭代(iteration):
迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
迭代是环结构,从初始状态开始,每次迭代都遍历这个环,并更新状态,多次迭代直到到达结束状态。
举个迭代的例子来说,计算n!就是前一个求和的结果作为这一次计算的初始值:
private static int sum(int n){
int total = 1;
for (int i = 2;i<=n;i++){
total*= i;
}
System.out.println(total);
return total;
}
递归(recursion):
递归调用就是某一方法直接或者间接的调用本身。递归的价值就在于许多应用程序可简洁的描述为递归形式。
递归是一个树结构,类似树 的深度优先遍历。而最基础的就是线性递归-单个递归基,而线性递归的模式就是减而治之的策略:递归每深入一层,待求解的问题规模就缩减一个常数。直至到一个简单的小问题,因此也满足有穷性。
递归的分析方法为递归跟踪和递归方程,类似数学里的几何和代数的关系。递归跟踪可用于分析跟踪算法的总体运行时间空间;递归方程则是无需绘制具体的调用过程,通过数学归纳导出复杂度