if(num<2)
  {
    alert("a")
    num++
  }
  else return; //设计程序中断点

解决方案 »

  1.   

    你的A()函数里当 num>=2 时没有了终止条件, 明显就是一个死循环递归, 必然报错
      

  2.   

    黄老师,我把程序改成这样了:
    <script type="text/javascript" language="javascript">
    <!--
    var num=0
    function A()
    {
     
      if(num<4)
        {
      alert(num)
      num++ 
      A()
      alert(num)
        }
    }//-->
    </script><body >
    <input type="button" onclick="A()" value="click">
    </body>
    alert放在if里就执行4次,放在if外却是5次。为何?
    在http://expert.csdn.net/Expert/topic/2461/2461555.xml?temp=4.362124E-02中
    很多人说递归是一个分支,我还是不理解。按程序执行的结果看,是所有递归都执行完后才
    执行第二个alert。 如果是放在if里面,就是递归多少次,就alert多少次。对吗?
      

  3.   

    alert放在if里就执行4次,放在if外却是5次。为何?当 num 取值 0, 1, 2, 3 时 if 判断里的alert() 发挥作用, 而当 num=4 的时候, if 判断条件不成立, 当然里面的alert也就不起作用了, 但是外面的alert由于没有判断条件, 程序也没有中止, 当然就会被运行, 因此放在if里面是alert 4 次而外面当然有5次了.
      

  4.   

    递归我不认为是一个分支, 应该是多次重复调用函数本身, 这个有点象 do ... while() 循环
      

  5.   

    我现在比较困惑的是递归的流程. 当alert在里面时,4次alert(4)是在递归时进行的还是递归结束后进行的?
      

  6.   

    你把递归想得太复杂了, 递归就是函数的重复调用而已.
    当 num=3 时(即第四次 alert ), 程序并没有中止, 而是第五次去调用函数A(), 虽然这次没有满足if判断条件, 没有 alert, 但是函数还是被调用运行了. 在 num=4 的时候由于没有满足 if 条件, 所以就没有运行 if 里面的语句, 即没有再次调用函数A(), 所以函数第五次运行后程序运行中止,