Java编程算法基础----递归原理分析

递归调用与一般的函数调用过程完全相同,只是被调用方法与主调方法相同而已。函数调用与正确返回是通过栈结构来实现的。

本节仔细分析了递归过程中,函数的调用、参数传递、函数返回的过程细节;通过分析揭示出递归调用的本质



















1.函数调用的执行过程是串行的

2.形式参数是调用函数时临时创建的


void f(){
	int a = 5;
	int b = 6;;
	int c = g(a,b);
	c++;
}
int g(int x, int y)
{	

	return x + y;
}




















在函数f中声明了3个局部变量a,b,c, 在内存中利用栈为其分配相应的内存空间,如右图

void  f(){    在第一个大括号开始时,分配局部变量

}  //在最后一个大括号,释放已经分配的局部变量























































































package NO4;

public class Test02 {
	public static int f(int n){
	
	  if(n == 0)//if(n <= 1)
		  return 1;
		
		return n * f(n - 1);
	
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		System.out.print(f(5));
	}

}










理解递归的关键在于理解形式参数在栈中存在多层的这么一种情况

可以类比生活中的一个例子:

从前有个山,山里有个庙,庙里住着俩和尚,老和尚给小和尚讲故事,讲的故事是" 从前有个山,山里有个庙"

看似像是循环,其实不是,   故事里的山和老和尚所处的山不是一回事

每次深入一层都有新的内容(故事里的可看做是形参)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值