fib函数用迭代替换递归

五迷三道 提交于 2020-02-28 11:36:31

fib函数递归实现:

        long Fib(long n)         {            if (n <= 1)            {                return n;            }            else            {                var t1 = Fib(n - 1);                var t2 = Fib(n - 2);                return  t1+ t2;            }        }

fib函数改为迭代:

    class Class1    {        class Node        {            public Node(long n, int pos)            {                this.n = n;                this.retStatus = pos;            }            public long n;         //参数            public int retStatus;            //0,表示temp中没有保存值            //1, 表示temp中保存了栈顶记录的t1值。            //2,表示temp中保存了栈顶记录的t2值。            public long ret;      //返回值            public long t1;      //存第一次调用Fib的返回值            public long t2;      //存第二次调用Fib的返回值        }        long Fib(int n)        {            long temp = 0;            var s = new Stack<Node>();            s.Push(new Node(n, 0));            while (s.Count > 0)            {                Node top = s.Peek();                switch (top.retStatus)                {                    case 0:                        if (n <= 1)                        {                            top.ret = n;                            temp = top.ret;                            s.Pop();                        }                        else                        {                            top.retStatus = 1;                            s.Push(new Node(n - 1, 0));                        }                        break;                    case 1:                        top.t1 = temp;                        top.retStatus = 2;                        s.Push(new Node(n - 2, 0));                        break;                    case 2:                        top.t2 = temp;                        top.ret = top.t1 + top.t2;                        temp = top.ret;                        s.Pop();                        break;                }            }            return temp;        }    }



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!