suma resueltos recursividad recursiva ejercicios c# generics

c# - resueltos - Tipos genéricos recursivos



recursividad fibonacci c# (2)

¿Es posible definir un tipo genérico en C # que se haga referencia a sí mismo?

Por ejemplo, quiero definir un Diccionario <> que mantiene su tipo como TValue (para una jerarquía).

Dictionary<string, Dictionary<string, Dictionary<string, [...]>>>


Otro ejemplo sería el árbol genérico.

public class Tree<T> where T : Tree<T> { public T Parent { get; private set; } public List<T> Children { get; private set; } public Tree(T parent) { this.Parent = parent; this.Children = new List<T>(); if(parent!=null) { parent.Children.Add(this); } } public bool IsRoot { get { return Parent == null; } } public bool IsLeaf { get { return Children.Count==0; } } }

Ahora para usarlo

public class CoordSys : Tree<CoordSys> { CoordSys() : base(null) { } CoordSys(CoordSys parent) : base(parent) { } public double LocalPosition { get; set; } public double GlobalPosition { get { return IsRoot?LocalPosition:Parent.GlobalPosition+LocalPosition; } } public static CoordSys NewRootCoordinate() { return new CoordSys(); } public CoordSys NewChildCoordinate(double localPos) { return new CoordSys(this) { LocalPosition = localPos }; } } static void Main() { // Make a coordinate tree: // // +--[C:50] // [A:0]---[B:100]--+ // +--[D:80] // var A=CoordSys.NewRootCoordinate(); var B=A.NewChildCoordinate(100); var C=B.NewChildCoordinate(50); var D=B.NewChildCoordinate(80); Debug.WriteLine(C.GlobalPosition); // 100+50 = 150 Debug.WriteLine(D.GlobalPosition); // 100+80 = 180 }

Tenga en cuenta que no puede crear una instancia directa del Tree<T> . Tiene que ser una clase base para la clase de nodo en el árbol. Pensar en la class Node : Tree<Node> { } .


Tratar:

class StringToDictionary : Dictionary<string, StringToDictionary> { }

Entonces puedes escribir:

var stuff = new StringToDictionary { { "Fruit", new StringToDictionary { { "Apple", null }, { "Banana", null }, { "Lemon", new StringToDictionary { { "Sharp", null } } } } }, };

Principio general para la recursión: encuentre alguna forma de darle un nombre al patrón recursivo, para que pueda referirse a sí mismo por su nombre.