8月24日
今天课堂上讲了递归的调用,递归的调用有可能会导致堆栈耗尽,要调用到一定深度后才停止下来。
小试身手:
//下面的程序出现内存出界错误:
class TestRam
{
public static void main(String[] args)
{
byte[] buf = new byte[1024*1024*100];//开辟的内存空间太大了"爆炸"
for(int i=0;i<buf.length;i++)
{
}
}
}
//递归的调用有可能会导致堆栈耗尽
2.//用递归把一个10进制整数转为2进制的实现
class IntoTest
{
public static void main(String[] args)
{
turnNum(10);
}
public static void turnNum(int num)
{
if(num==0)
{
return;
}
turnNum(num/2);
int num1=num%2;
System.out.print(num1);
}
}
3.//用递归思想玩转汉诺塔游戏
class Hanoi
{
public static void main(String[] args)
{
hanoi(4,'A','B','C');
}
public static void hanoi(int n,char a,char b,char c)
{
if(n==1)
{
move(1,a,c);
return;
}
hanoi(n-1,a,c,b);
move(n,a,c);
hanoi(n-1,b,a,c);
}
}
4.//求公约数的方法
class Gongyue
{
public static void main(String[] args)
{
Gongyue gy = new Gongyue();
gy.yueshu(12,3);
}
public void yueshu(int num1,int num2)
{
if(num1==num2)
{
System.out.println(num1);
}
else
yueshu(abs(num1-num2),min(num1,num2));
}
public int abs(int num)
{
return num>0 ? num: -num;
}
public int min(int num1,int num2)
{
return num1>num2 ?num2:num1;
}
}
5.一个更过瘾的程序: