算法问题1:有一列数1,1,2,3,5,........求第30个数.

我的解题思想(反正题不是我自己想出来的,感觉应该要有这样的思考方式去想这个问题,请高手指教):

1.把第30个数设为n,感觉这个很重要,要把n利用起来才可以解决问题

2.首先是要能看出第n个数是n前面2个数的和,即:n=n-1+n-2,至于要怎么看出我也不清楚

3.要求n必须要先求出第n-1和第n-2个数的值,所以应该使用递归,先定义好递归的函数,例如:int Foo(int n){...};

4.找出递归点,n小于0的都为0,n小于3的都为1,然后n>=3时才开始满足条件

所以:

int Foo(int n){

  if(n<0)

  return 0;

  else if(n>0&&n<3)

  return 1;

    else

  return Foo(n-1)+Foo(n-2);

};

完整代码如下:

 

    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 1; i <= 30; i++)
            {
                Console.WriteLine(Foo(i));
            }
            Console.ReadKey();
        }

        public static int Foo(int n)
        {
            if (n <= 0)
                return 0;
            if (n > 0 && n < 3)
                return 1;
            else
                return Foo(n - 1) + Foo(n - 2);
        }
    }

 

posted @ 2013-09-08 23:15  TJM  阅读(673)  评论(0)    收藏  举报