Java中递归的实现
2017-03-16 10:39
85 查看
递归方法:就是方法自身去调用自身
1.首先先看这段代码:
package com.cal.recursion;
public class Test01 {
public static void main(String[] args) {
m1();
}
public static void m1(){
Test01.m1();
}
}
package com.cal.recursion;
public class Test02 {
public static void main(String[] args) {
int n=5;
int value = add(5);
System.out.println(value);
}
public static int add(int n){
int sum = 0;
for(int i=0;i<=n;i++){
sum+=i;
}
return sum;
}
}
3.这是使用递归来实现的:
package com.cal.recursion;
public class Test03 {
public static void main(String[] args) {
int n=5;
int value = add(5);
System.out.println(value);
}
public static int add(int n){
if(n==1){
return 1;
}else{
return n + add(n-1);
}
}
}
1.首先先看这段代码:
package com.cal.recursion;
public class Test01 {
public static void main(String[] args) {
m1();
}
public static void m1(){
Test01.m1();
}
}
注释:这里用到了递归方法,主方法里面去调用m1()方法,m1再去调用他自己,但是这又不是完全的递归,因为完全正确的递归要有结束条件,否则这个方法就一直在调用自身,循环下去,
在堆中就只有压栈,而没有弹栈,就会出现栈的益出,出现的结果就是:
at com.cal.recursion.Test01.m1(Test01.java:9) at com.cal.recursion.Test01.m1(Test01.java:9) at com.cal.recursion.Test01.m1(Test01.java:9) at com.cal.recursion.Test01.m1(Test01.java:9) at com.cal.recursion.Test01.m1(Test01.java:9) at com.cal.recursion.Test01.m1(Test01.java:9) at com.cal.recursion.Test01.m1(Test01.java:9) at com.cal.recursion.Test01.m1(Test01.java:9) at com.cal.recursion.Test01.m1(Test01.java:9) at com.cal.recursion.Test01.m1(Test01.java:9) at com.cal.recursion.Test01.m1(Test01.java:9) at com.cal.recursion.Test01.m1(Test01.java:9) at com.cal.recursion.Test01.m1(Test01.java:9) at com.cal.recursion.Test01.m1(Test01.java:9) at com.cal.recursion.Test01.m1(Test01.java:9)
但是依然会报错:java.lang.StackOverflowError,所以递归必须要有结束的条件2.实现1-n的累加,这是不用递归实现的:
package com.cal.recursion;
public class Test02 {
public static void main(String[] args) {
int n=5;
int value = add(5);
System.out.println(value);
}
public static int add(int n){
int sum = 0;
for(int i=0;i<=n;i++){
sum+=i;
}
return sum;
}
}
3.这是使用递归来实现的:
package com.cal.recursion;
public class Test03 {
public static void main(String[] args) {
int n=5;
int value = add(5);
System.out.println(value);
}
public static int add(int n){
if(n==1){
return 1;
}else{
return n + add(n-1);
}
}
}
相关文章推荐
- 树形目录的递归实现(一)数据库+jsp+javabean
- 我用Java实现的二叉树的遍历(递归和非递归)
- java代码实现递归@oneToMany
- 简单的背包问题--java递归实现
- 乘方--java递归实现--循环实现
- 树形目录的递归实现(一)数据库+jsp+javabean
- (数据结构与算法分析 一)------快速求幂算法,Java递归实现
- 排列与组合的Java递归实现
- n皇后问题java递归实现
- 斐波那契数(JAVA实现)--递归中的Fibonacci数列
- 回文 用递归实现 java
- 递归的使用——关于括号排列(分别使用Java和C++算法实现)
- java递归实现文件的删除和拷贝
- 棋盘覆盖--递归分治java实现
- Java实现折半查找(二分查找)的递归和非递归算法
- java用递归实现折半查找法
- Java实现折半查找(二分查找)的递归和非递归算法
- 用java实现的迭代和递归插入排序
- 完全二叉树的JAVA实现(以及非递归遍历方法)
- Java 非递归实现的排列组合中的平均分组问题