我发的第一篇递归贴里,有人出了一道只用递归画出一个直角三角形,后来看了方法,发现public int draw(int i){
if(i > 0){
draw2(i);
System.out.println();
draw(--i);
}
return 0;
}
public int draw2(int i){
if(i > 0){
System.out.print("* ");
draw2(--i);
}
return 0;
这个里面,没有象一些书上写的那样,如先解决第一个问题,然后调用本身解决高级数的问题
如HANOI塔的方法:
void hanoi(int n,char a,char b,char c)
{
if(n==1)
move(a,b);
else
{
hanoi(n-1,a,c,b);//将n-1个盘从a->b借助c来实现 ‘|’
move(a,c); //将底层的一个盘从a->c |
hanoi(n-1,b,a,c);//将n-1个盘从b->c借助a 来实现 |
我比较容易理解这样的,和想的这样的,又如HANOI塔的另一种递归形式:
void hanoi(int n,int A,int B,int C)
{
if(n>0){
hanoi(--n,A,C,B);
move(A,B);
hanoi(--n,C,B,A)
}
}
像这样的我就很难想到和很难看懂,因为我以前一直觉得,递归,书上讲的都是先解决"n==1"的时候如何解决,看了那个直角三角问题后,对递归越来越混淆了,
应该如何正确使用递归?
还有这两种方法的本质到底一不一样????
是不是两种方法是一个意思????
如果是,请高手帮我再写一个另一种递归的直角三角形解决方法,谢谢!!
if(i > 0){
draw2(i);
System.out.println();
draw(--i);
}
return 0;
}
public int draw2(int i){
if(i > 0){
System.out.print("* ");
draw2(--i);
}
return 0;
这个里面,没有象一些书上写的那样,如先解决第一个问题,然后调用本身解决高级数的问题
如HANOI塔的方法:
void hanoi(int n,char a,char b,char c)
{
if(n==1)
move(a,b);
else
{
hanoi(n-1,a,c,b);//将n-1个盘从a->b借助c来实现 ‘|’
move(a,c); //将底层的一个盘从a->c |
hanoi(n-1,b,a,c);//将n-1个盘从b->c借助a 来实现 |
我比较容易理解这样的,和想的这样的,又如HANOI塔的另一种递归形式:
void hanoi(int n,int A,int B,int C)
{
if(n>0){
hanoi(--n,A,C,B);
move(A,B);
hanoi(--n,C,B,A)
}
}
像这样的我就很难想到和很难看懂,因为我以前一直觉得,递归,书上讲的都是先解决"n==1"的时候如何解决,看了那个直角三角问题后,对递归越来越混淆了,
应该如何正确使用递归?
还有这两种方法的本质到底一不一样????
是不是两种方法是一个意思????
如果是,请高手帮我再写一个另一种递归的直角三角形解决方法,谢谢!!










