问题如下:当int_Num=2时程序进程是什么,请详细解答
以下系拷贝daviddivad
Private   Sub   Command1_Click()   
          Call   Hanoi(4,   "第一根柱子",   "第二根柱子",   "第三根柱子")   
  End   Sub   
    
  Private   Sub   Hanoi(ByVal   int_Num   As   Integer,   ByVal   strA   As   String,   ByVal   strB   As   String,   ByVal   strC   As   String)   
          'int_Num:总的盘子的个数   
          If   int_Num   =   1   Then   
                  Print   "Move   "   &   strA   &   "   to   "   &   strC   
          Else   
                  Call   Hanoi(int_Num   -   1,   strA,   strC,   strB)   
                  Print   "Move   "   &   strA   &   "   to   "   &   strC   
                  Call   Hanoi(int_Num   -   1,   strB,   strA,   strC)   
          End   If   
  End   Sub   
  

解决方案 »

  1.   


    'int_Num=2 
      Call  Hanoi(1,  "第一根柱子",  "第三根柱子",  "第二根柱子")
      Print  "Move  "  & "第一根柱子"  &  "  to  "  &  "第二根柱子"  Print  "Move  "  &  "第一根柱子" &  "  to  "  &  "第三根柱子"   Call  Hanoi(1,  "第二根柱子", "第一根柱子",   "第三根柱子") 
      Print  "Move  "  & "第二根柱子"  &  "  to  "  &  "第三根柱子"'结果:  Move  第一根柱子  to   第二根柱子
      Move  第一根柱子   to   第三根柱子
      Move  第二根柱子   to   第二根柱子
      

  2.   

    看了半天,还是不理解
    当int_Num=2时,int_Num-1就是1啊
    这时不是调用 If  int_Num  =  1  Then  
                      Print  "Move  "  &  strA  &  "  to  "  &  strC  
      

  3.   

     
     Private  Sub  Hanoi(ByVal  int_Num  As  Integer,  ByVal  strA  As  String,  ByVal  strB  As  String,  ByVal  strC  As  String)  
              'int_Num:总的盘子的个数  
    'int_Num =2 
              If  int_Num  =  1  Then  ''int_Num =2 
                      Print  "Move  "  &  strA  &  "  to  "  &  strC  
              Else  '当 ''int_Num =2 运行下面
                         Call  Hanoi(int_Num  -  1,  strA,  strC,  strB)  '这里调用时 init_Num-1 才是1
                      Print  "Move  "  &  strA  &  "  to  "  &  strC  
                      Call  Hanoi(int_Num  -  1,  strB,  strA,  strC)  
              End  If  
      End  Sub  
      

  4.   

    雪情已经讲得很清楚了执行第二次的时候int_Num的值才是1
      

  5.   

    我的分析:
    当int_Num=2 执行
     Call  Hanoi(int_Num  -  1,  strA,  strC,  strB)
    即Call  Hanoi(1,  strA,  strC,  strB)
    随即调用 If  int_Num  =  1  Then  
                      Print  "Move  "  &  strA  &  "  to  "  &  strC
    因为此时hanoi的参数是(1,strA,strC,strB)后两参数互换换位置了
    第一步结果就是 :Move  第一根柱子  to  第二根柱子 
    然后执行下一句Call  Hanoi(int_Num  -  1,  strB,  strA,  strC)
    即Call  Hanoi(1,  strB,  strA,  strC)
    继续调用If  int_Num  =  1  Then  
                      Print  "Move  "  &  strA  &  "  to  "  &  strC
    第二步的结果就是:Move  第二根柱子  to  第三根柱子 啊 
    但是运行结果第二步却是 Move  第一根柱子  to  第三根柱子
    我的分析哪里错了,还有我对call的理解是不是有错
      

  6.   


    我的分析: 
    当int_Num=2 执行 
    Call  Hanoi(int_Num  -  1,  strA,  strC,  strB) 
    即Call  Hanoi(1,  strA,  strC,  strB) 
    随即调用 If  int_Num  =  1  Then  
                      Print  "Move  "  &  strA  &  "  to  "  &  strC 
    因为此时hanoi的参数是(1,strA,strC,strB)后两参数互换换位置了 
    第一步结果就是 :Move  第一根柱子  to  第二根柱子 

    中间还有一句:
    Print  "Move  "  &  strA  &  "  to  "  &  strC 
    这一句不要忘记了.
    然后执行下一句Call  Hanoi(int_Num  -  1,  strB,  strA,  strC) 
    即Call  Hanoi(1,  strB,  strA,  strC) 
    继续调用If  int_Num  =  1  Then  
                      Print  "Move  "  &  strA  &  "  to  "  &  strC 
    第二步的结果就是:Move  第二根柱子  to  第三根柱子 啊 
    但是运行结果第二步却是 Move  第一根柱子  to  第三根柱子 
    我的分析哪里错了,还有我对call的理解是不是有错 
      

  7.   

    这是我的另一个问题
    'int_Num=2 
      Call  Hanoi(1,  "第一根柱子",  "第三根柱子",  "第二根柱子") 
      Print  "Move  "  & "第一根柱子"  &  "  to  "  &  "第二根柱子"   Print  "Move  "  &  "第一根柱子" &  "  to  "  &  "第三根柱子" 
    这里怎么有两句输出语句,我只能分析到第一句输出
    这句Print  "Move  "  &  "第一根柱子" &  "  to  "  &  "第三根柱子" 
    怎么来的?
      

  8.   

    我明白了 当第一次调用
    If  int_Num  =  1  Then  
                      Print  "Move  "  &  strA  &  "  to  "  &  strC  
    后第一次输出
    接着第二次输出,即是Print  "Move  "  &  strA  &  "  to  "  &  strC 
    然后进行到Call  Hanoi(int_Num  -  1,  strB,  strA,  strC)
    继续调用int_num=1的过程
    接着第三次输出
    谢谢大家指点,菜鸟问题就是多
    问的都是大家觉得不是问题的问题
    谢谢