实现递归
当在一个函数的运行期间调用另一个函数时,在运行该被调用函数之前,需先完成三件事:
- 将所有的实在参数、返回地址等信息传递给被调用函数保存;
- 为被调用函数的局部变量分配存储区;
- 将控制转移到被调用函数的入口。
从被调用函数返回调用函数之前,应该完成:
- 保存被调函数的计算结果;
- 释放被调函数的数据区;
- 依照被调函数保存的返回地址将控制转移到调用函数。
多个函数嵌套调用的规则是:
后调用先返回此时的内存管理实行“栈式管理”
代码
汉诺塔v1.0
public class hanoi {
public static void haonoi(int n,char a,char b,char c){
if(n==1)
System.out.println(a +"->"+ c);
else
{
haonoi(n-1,a,c,b);
System.out.println(a+"->"+c);
haonoi(n-1,b,a,c);
}
}
public static void main(String[] args) {
int n =4;
haonoi(n,'x','y','z');
}
}
汉诺塔v1.1
public class hanoi {
static int i =0;
public static void haonoi(int n,char a,char b,char c){
if(n==1)
move(n,a,c);
else
{
haonoi(n-1,a,c,b);
move(n,a,c);
haonoi(n-1,b,a,c);
}
}
public static void move(int n,char a,char c){
System.out.println("第" + (++i) +" 次移动 : " + a +" -> " + c);
}
public static void main(String[] args) {
int n = 4;
haonoi(n,'x','y','z');
}
}
程序运行流程图: