//用递归算法实现1,1,2,3,5,8,13...的第30位数是多少;using System;{
    public class program
    {
        static void Main()
        {
            
            for(int i=1;i<=30;i++)
            {
               Console.WriteLine( dg(i));
            }        }
        public int dg(int n)
        {
            if (n <= 1 || n == 2)
            {
                return n;
            }
            if (n > 2)
            {
                return (dg(n - 1) + dg(n - 2));
            }
        }
    }
}
//请问这段程序错在哪里??

解决方案 »

  1.   

    错在:if (n <= 1 || n == 2)
      

  2.   

    public int dg(int n)
        {
            if (n <= 1 || n == 2)
            {
                return n;
            }
            return (dg(n - 1) + dg(n - 2));
        }
      

  3.   

    public int dg(int n)
            {
                if (n == 1)
                {
                    return 1;
                }
                else if(n==1 || n == 3)
                {
                    return n-1;
                }
                else if (n > 3)
                {
                    return dg(n - 1) + dg(n - 2);
                }
            }
      

  4.   

    上面的错了一处,应改为:
    public int dg(int n)
            {
                if (n == 1)
                {
                    return 1;
                }
                else if(n==2 || n == 3)
                {
                    return n-1;
                }
                else if (n > 3)
                {
                    return dg(n - 1) + dg(n - 2);
                }
            }
      

  5.   

    应改为:
    public int dg(int n)
            {
                if (n <= 1)
                {
                    return n;
                }
                if (n >= 2)
                {
                    return (dg(n - 1) + dg(n - 2));
                }
            }
      

  6.   

    public int dg(int n)
            {
                if (n <= 1 || n == 2)
                {
                    return n; //此处有问题!!
                }
                if (n > 2)
                {
                    return (dg(n - 1) + dg(n - 2));
                }
            }
    -------------------------------------------
    改成
    public int dg(int n)
            {
               if( n < 1 )
               {
                   return -1; //如过输入的数小于1,则报错
               }
            else
            { 
                if (n == 1 || n == 2)
                {
                    return 1;  //注:此处应改为1
                }
                else
               {
                    return (dg(n - 1) + dg(n - 2));
                }
            }
            }
      

  7.   

    改为:
    public int dg(int n)
        {
            if (n <= 1 || n == 2)
            {
                return n;
            }
            return (dg(n - 1) + dg(n - 2));
        }即可...
      

  8.   

    首先没有命名空间
    其次dg方法不是静态的,不能在类program没有实例化的情况下调用
    再次dg方法的逻辑错误,不能实现你的要求修改后代码如下using System;namespace XX//添加命名空间
    {
        public class program
        {
            static void Main()
            {
                for(int i=1;i<=30;i++)
                {
                   Console.WriteLine( dg(i));
                }        }
            public static int dg(int n)//声明为静态的
            {
                if (n <= 0)//应控制错误
                {
                    return -1;
                }
                else if (n <= 2)
                {
                    return 1;//应返回1
                }
                else
                {
                    return (dg(n - 1) + dg(n - 2));
                }
            }
        }
    }