两种递归方法的比较

有道题目:

  一列数的规则如下: 1、1、2、3、5、8、13、21、34......

  求第30位数是多少, 用递归算法实现。

两种实现方式,一种是从后往前加,一种是从前往后加

Foo1方法看起来简洁,但执行次数多,第30要调用1664079次

Foo2参数多,但只要调用29次

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

 

posted @ 2016-09-07 16:23  人工智能  阅读(1267)  评论(0编辑  收藏  举报