首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2012-09-17 
递归,堆栈,迭代器,yield return!):递归是不是就是用的堆栈来计算的啊?我的理解是这样的,大侠指点下...看

递归,堆栈,迭代器,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);            }        }    }} 

热点排行