大家好,又见面了,我是你们的朋友全栈君。
迭代(Iteration)与递归(Recursion)是开发过程中常用的编程技巧,二者有相似,也有区别。
1、递归
简单地说,就是函数调用函数自己。
通常把相同规则的业务,定义为一个函数,通过函数的重复调用,完成整体业务的实现。用有限的语句来定义对象的无限集合。
比如,一个数字的阶乘计算,通过递归实现如下:
//递归
public static int recursion(int num){
if (num <= 1){
return 1;
} else {
return num * recursion(num - 1);
}
}
public static void main(String[] args) {
int result = recursion(5);
System.out.println(result);
}
2、迭代
迭代是通过计算得到下一个计算初始值,并使用计算得到的值进行下一步的计算,直到不符合条件,计算结束。与递归的区别为,函数A调用其他函数B。
同样计算阶乘,使用迭代方法实现如下:
//迭代
public static int iteration(int num){
if (num <= 0){
return 1;
}
int result = 1;
for (int i = num; i >= 1; i--){
result *= i;
}
return result;
}
public static void main(String[] args) {
int result = iteration(5);
System.out.println(result);
}
3、比较
①递归中一定有迭代,迭代中不一定有递归。多数情况下上二者可以相互转换。
②递归满足条件后,逐层返回,每层都计算完后才返回结果;迭代满足条件后,通过计数器结束循环,直接返回计算结果。递归与迭代相比较,效率低。
③能使用迭代,尽量不要使用递归,因为迭代会浪费空间,栈深不够,会出现StackOverflowError栈异常。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/135085.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...