方法递归调用

方法递归

*什么是递归?

  • 方法自身调用自身

     	a(){
     		a();
     }
    

    *递归很耗费栈内存,递归算法可以不用的时候尽量不使用

*递归必须有结束条件,没有结束条件会发生栈内存溢出错误。有时由于递归的太深,即使有结束条件也可能发生栈内存溢出错误

例:

//方法递归
//此程序出错:Exception in thread "main" java.lang.StackOverflowError
//栈内存溢出错误


public class RecursionTest01 {

	public static void main(String [] args) {
		
		System.out.println("main begin");
		
		doSome();
		
		System.out.println("main over");
	}
	
	//以下代码可以被重复调用,并且只要调用就会在栈内存中分配一块所属的内存空间
	public static void doSome() {
		
		System.out.println("doSome begin");
		
		doSome();//这行代码不结束,下一行程序是不能执行的
		
		System.out.println("doSome over");
	}
}
*此程序运行的时候发生这样的错误:
	Exception in thread "main" java.lang.StackOverflowError
	栈内存溢出错误
	错误发生无法挽回,只有一个结果,就是JVM停止工作

示例1:

  • 计算1-100的和
public class RecursionTest02 {

	public static void main(String [] args) {
		
		int n = 100;
		int retValue = sum(n);
		
		System.out.println(retValue);
	}
	
	public static int sum(int n) {
		
		if(n == 1) {
			
			return 1;
		}
		
		return n + sum(n - 1);
	}
}

示例二:

  • 计算N的阶乘
import java.util.Scanner;

public class RecursionTest03 {

	
	
	public static void main(String [] args) {
		
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int retValue = method(n);
		
		System.out.println(retValue);
	}
	
	public static int method (int n) {
		
		if(n == 1) {
			
			return 1;
		}
		
		return n * method(n - 1);
		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值