读书人

递归,堆栈,迭代器,yield return;解决办

发布时间: 2012-09-17 12:06:51 作者: rapoo

递归,堆栈,迭代器,yield return;;
!):递归是不是就是用的堆栈来计算的啊?我的理解是这样的,大侠指点下...看到sp1234 提到才想到 递归有堆栈的联系..:: 假如一个递归算法,需要递归100次... 然后pop.push(100)......pop.push(1)..这样先堆好了 在 pop.drop(1)............ pop.drop(100),这样来计算的....假如drop(1)执行的时间复杂度是N
那么时间复杂度是多少?100N?....
!!):迭代器 是不是与指针有关..比如存储数据: 是通过指针++来逐步存储数据的...迭代器这个请详细解释下;;;
!!!):yield return a 是不是就是在当前迭代快中 add a 这个值 啊.....
假如是这样的话,我完全可以用List<T> 这样的链表来代替啊... for(i....) list[T] 实例.add(值)..那么迭代器感觉可以不需要啊

[解决办法]
“那么时间复杂度是多少?100N?....” --- 1
不需要循环,直接取值,因为它有一个栈顶指针啊,任何时候操作都是在栈顶
[解决办法]
贴一个手动实现迭代器的代码

C# code
using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication1{    class OneToThree : IEnumerable<int>    {        public class OneToThreeEnumerator : IEnumerator<int>, IEnumerator        {            private int _current = 0;            public int Current            {                get { return _current; }            }            public void Dispose()            {                //这里我们不需要清理            }            object System.Collections.IEnumerator.Current            {                get { return _current; }            }            public bool MoveNext()            {                _current++;                return _current <= 3;            }            public void Reset()            {                _current = 0;            }        }        public IEnumerator<int> GetEnumerator()        {            return new OneToThree.OneToThreeEnumerator();        }        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()        {            return new OneToThree.OneToThreeEnumerator();        }    }    class Program    {        static void Main(string[] args)        {            foreach (int x in new OneToThree())            {                Console.WriteLine(x);            }        }    }} 

读书人网 >C#

热点推荐