日期:2014-05-17  浏览次数:21167 次

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