java吧 关注:1,303,182贴子:12,857,432
  • 3回复贴,共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回复
    恩,我现在想学递归,我想问
    应该如何正确使用递归? 
    一楼的例子里
    这两种方法的本质到底一不一样???? 
    是不是两种方法是一个意思????


    3楼2008-04-23 16:56
    回复
      2026-05-21 01:44:20
      广告
      不感兴趣
      开通SVIP免广告
      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
        回复