RT~~
说说思路
新手上路  没点头绪
最好能简单的说明递归方法!!!

解决方案 »

  1.   

    public int GetNumberAtPos(int pos)
            {
                if(pos==0||pos==1)
                {
                    return 1;
                }
                int res = GetNumberAtPos(pos - 1) + GetNumberAtPos(pos - 2);
                return res;
            }
      

  2.   

    protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(Foo(3).ToString());
        }    public static int Foo(int i)
        {
            if (i <= 0)
                return 0;
            else if (i > 0 && i <= 2)
                return 1;
            else return Foo(i - 1) + Foo(i - 2);
        } 
      

  3.   

    不用递归 用循环也能实现啊!不过都是一样的,反正你要输出是不是!会用那个用哪个
    这不是fac***算法吗? protected void Page_Load(object sender, EventArgs e)
        {
            int[] arr = new int[30];
            arr[0] = 1;
            arr[1] = 1;
            for (int i = 0; i < 30; i++)
            {
                if ((i == 0) || (i == 1))
                {
                    Response.Write(arr[i]+"  ");
                }
                else
                {
                    arr[i] = arr[i - 1] + arr[i - 2];
                    Response.Write("  "+arr[i]);
                }
            }
        }
      

  4.   


      int a = 1; //开始第一位
            int b = 1; //开始第二位
            int c = 0; //相加值
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.Append(a+"、"+b);  //初始
            for (int i = 1; i <= 28; i++)  //已经有2个,所以循环28个可以到30个。
            {
                c = a + b;  //
                a = b;   // 为计算下一个值赋值
                b = c;   // 为计算下一个值赋值
                sb.Append("、"+c.ToString());  //累加
            }
            Response.Write(sb.ToString());        //结果:1、1、2、3、5、8、13、21、34、55、89、144、233、377、610、987、1597、2584、4181、6765、10946、17711、28657、46368、75025、121393、196418、317811、514229、832040 
       
      

  5.   

      public static int 递归算法(int num)
      {
        if (num <= 0)
          return 0;
        else if (num > 0 && num <= 2)
          return 1;
        else return 递归算法(num - 1) + 递归算法(num - 2);
      } 
      

  6.   

    public class MainClass  
        {  
            public static void Main()    
            {  
                Console.WriteLine(Foo(30));  
            }  
            public static int Foo(int i)  
            {  
                if (i <= 0)  
                    return 0;  
                else if(i > 0 && i <= 2)  
                    return 1;  
                else return Foo(i -1) + Foo(i - 2);  
            }  
        }  
      

  7.   


    void main()
    {
        console.WriteLine(recu(30));
        console.ReadLine();
    }public static int recu(int i)
    {
    if(i <= 0)
    return 0;
    if (i = 1)
    return 1;
    if (i > 1)
    return recu(i-2) + recu(i-1);

      

  8.   

    int a = 1;
    int b = 1;
    List<int> re = new List<int>();
    re.Add(1);
    re.Add(1);
    while(re.Count() < 30)
    {
        int t = a + b;
        a = b;
        b = t;
        re.Add(b);
    }
    return re;
      

  9.   

    130道面试题的递归算法;
    3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。
    答:public class MainClass 

    public static void Main() 

    Console.WriteLine(Foo(30)); 

    public static int Foo(int i) 

    if (i <= 0) 
    return 0; 
    else if(i > 0 && i <= 2) 
    return 1; 
    else return Foo(i -1) + Foo(i - 2); 

    }
      

  10.   

    上面随手打的,敲错不少地方,重新来一次void main()
    {
        string result = recu(30).toString();
        console.WriteLine(result);
        console.ReadLine();
    }public static int recu(int i)
    {
        if(i <= 0)
        return 0;    else if (i = 1)
        return 1;    else
        return recu(i-2) + recu(i-1);
    }
      

  11.   


            Int64[] list = new Int64[100];        private void Form1_Load(object sender, EventArgs e)
            {
                list[0] = 1;
                list[1] = 1;
                for (int i = 2; i < 100; i++)
                {
                    list[i] = list[i - 1] + list[i - 2];
                }
            }        private void btnTest_Click(object sender, EventArgs e)
            {
                double f = getFibonacciNumAtPos(5);
                string f1 = GetNumberAtListPos(5);
            }        string GetNumberAtListPos(int pos)
            {
                return list[pos - 1].ToString();
            }        double getFibonacciNumAtPos(int n)
            {
                //直接利用其通项公式 (1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}
                return (1.0 / Math.Sqrt(5.0)) * (Math.Pow((1 + Math.Sqrt(5.0)) / 2.0, n) - Math.Pow((1 - Math.Sqrt(5.0)) / 2.0, n));
            }
    提供这两种方法,不建议在程序中用递归
      

  12.   

    //递归裴波那契数列
    public int fei(int i)
    {
        if (i==1 || i==2)
        {
            return 1;
        }
        else
        {
            return fei(i-1) + fei(i-2);
        }
    }
    //非递归裴波那契数列,unsafe代码(用指针)
    public unsafe int fib(int no) 
    {
        int* fib = stackalloc int[no];
        int* p = fib;
        *p++ = *p++ = 1;
        for (int i=2; i<no; ++i, ++p) *p = p[-1] + p[-2];
        return fib[no];
    }
      

  13.   

    private static long getNum(long num){
    return num==2||num==1 ? 1 : getNum(num-1)+getNum(num-2);
    }