java吧 关注:1,300,741贴子:12,844,625
  • 4回复贴,共1

还是关于递归,有心得的再进

只看楼主收藏回复

我发的第一篇递归贴里,有人出了一道只用递归画出一个直角三角形,后来看了方法,发现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"的时候如何解决,看了那个直角三角问题后,对递归越来越混淆了,
应该如何正确使用递归?
还有这两种方法的本质到底一不一样????
是不是两种方法是一个意思????
如果是,请高手帮我再写一个另一种递归的直角三角形解决方法,谢谢!!


1楼2008-04-23 13:27回复
    • 202.101.103.*
    楼主你再看看那个直三角贴的另外个解决方案:
     public class Test { 

    public void draw(int times) { 
    if(times==0){ 
     return; 
    }else{ 
    draw(times-1); 

    for(int i=0; i<times; i++) { 
    System.out.print("*"); 

    System.out.println(); 

    public static void main(String[] args) { 
    new Test().draw(5); 



    这个应该好理解.
    你说的那个只不过是把for再用个递归实现了


    2楼2008-04-23 14:59
    回复
      2026-04-02 02:56:18
      广告
      不感兴趣
      开通SVIP免广告
      恩,我现在想学递归,我想问
      应该如何正确使用递归? 
      一楼的例子里
      这两种方法的本质到底一不一样???? 
      是不是两种方法是一个意思????


      3楼2008-04-23 16:56
      回复
        import java.util.*;
        public class Jie
        {
        public static void main(String[] args)
        {
        System.out.println("input a number");
        Scanner sc=new Scanner(System.in);
        int n;
        n=sc.nextInt();
        System.out.println(n+"!Ϊ"+jie(n));

        }
        public static long jie(int n)
        {
        long j;
        if(n==1||n==0)
        j=1;
        else
        {
         j=jie(n-1)*n;

        return j;
        }
        }
        再如这个,我用的是if(n==1||n==0)
        j=1;
        else
        {
         j=jie(n-1)*n;

        能不能直接一个IF语句来递归,就像一楼的例子,


        4楼2008-04-23 16:58
        回复
          指的是,一楼的HANIO例子


          5楼2008-04-23 16:59
          回复