递归,堆栈,迭代器,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
不需要循环,直接取值,因为它有一个栈顶指针啊,任何时候操作都是在栈顶
[解决办法]
贴一个手动实现迭代器的代码
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); } } }}