这个问题貌似没法用文字很好的解释
建议你还是Debug一步步看
或者找个周围懂的人当面问一下Debug的时候关注一下 Count的参数,以及在什么时点WriteLine的

解决方案 »

  1.   

    这是基本的数学递归推论啊。比如说计算一个函数 
         f(x) = f(x-1)+w(x);  {x>0)
             f(x) = 0;
    那么你能解出什么呢?答案是 f(x) = w(1) + w(2) + ..... + w(x)。基于堆栈的程序方法调用(函数调用)也是一样的解题机制。
      

  2.   

    可以这么理解,每次函数执行都会在栈(stack)中保留形参以及变量的备份,由于栈是一种LIFO(后进先出)的数据结构,由于栈底是3,栈顶是1,中间是2,输出的结果自然是1、2、3了。
      

  3.   

              f(x) = f(x-1)+w(x);  {x>0}
              f(0) = 0;
      

  4.   

    用自然语言来描述“算法”就是:如果要打印n个数,首先打印n-1个数的结果,然后打印n本身。
    如果要打印0个数,则什么也不做。这样两条规则,写成一个递归程序!
      

  5.   

    因为递归调用在前,输出值在后。
    所以内层代码执行完了,才输出外层。
    颠倒
               Count (inval - 1);
               Console.WriteLine ("{0}", inVal) ;
    就对了。
      

  6.   


    执行Count (inval);
    要等这个函数:
    Count (inval - 1); 
    执行完毕,才会执行:          
    Console.WriteLine ("{0}", inVal) ;
    ----
    执行Count (inval-1);
    要等这个函数:
    Count (inval - 2); 
    执行完毕,才会执行:          
    Console.WriteLine ("{0}", inVal-1) ;...
    这就是递归了。
      

  7.   

    C#递归算法经典
      private void btn_Get_Click(object sender, EventArgs e)
            {
                int P_int_temp;//定义整型变量
                if (int.TryParse(txt_value.Text, out P_int_temp))//为变量赋值
                {
                    lb_result.Text = //输出计算结果
                        "计算结果为:" + Get(P_int_temp).ToString();
                }
                else
                {
                    MessageBox.Show(//提示输入正确数值
                        "请输入正确的数值!","提示!");
                }
            }              // 递归算法
            // <param name="i">参与计算的数值</param>
            // <returns>计算结果</returns>
            int Get(int i)
            {
                if (i <= 0) //判断数值是否小于0
                    return 0; //返回数值0
                else if (i >= 0 && i <= 2) //判断位数是否大于等于0并且小于等于2
                    return 1; //返回数值1
                else //如果不满足上述条件执行下面语句
                    return Get(i - 1) + Get(i - 2); //返回指定位数前两位数的和
            }
        }