爬楼梯问题迭代算法解!

 有一段楼梯有10级台阶,规定每一步只能跨一级或两级或三级,要登上第10级台阶有几种不同的走法?

 

 思路:

0节楼梯: 1  (0

1节楼梯: 1  (1)

2节楼梯: 2  (11、 2)

3节楼梯: 4  (111、     12、   21、   3)

4节楼梯: 7  (1111、   121、  211、 31、

                    13、

                    112、    22 )

   7=4+2+1

   4=2+1+1

   2=1+1+0

   1=1+0+0

抽象f(n)=f(n-3)+f(n-2)+f(n-1)

       


        /// <summary>
        /// n为阶梯数
        /// </summary>
        /// <param name="n"></param>
        /// <returns>z 为走法数</returns>
       static long fib3(int n)
        {

            long x = 0, y = 0,z=1;
            long w, k;

            for (int j = 0; j < n; j++)
            {

                w = z;
                k = y;
                z = x + y + z;
                y = w;
                x = k;
                
                
            }

            return z;

        }

        static void Main(string[] args)
        {
            for (int i = 1; i <= 10; i++)
            {
                Console.WriteLine(fib3(i));
            }
            Console.Read();
        }

    }

 

迭代法性能

 

递归法性能 

 

 


        /// <summary>
        /// 递归算法
        /// </summary>
        /// <param name="n"></param>
        /// <returns></returns>
        static long dfib1(int n)
        {
            if (n < 1)
            { return 0; }

            if (n == 1)
                return 1;
            if (n == 2)
                return 2;
            if (n == 3)
                return 4;

            
            

            return dfib1(n - 1) + dfib1(n - 2) + dfib1(n-3);

           

        } 

 

 

 

 

 

posted @ 2010-04-09 14:08  漠北水獭  阅读(5825)  评论(0编辑  收藏  举报