public void dynamicTransfer(List <Stack <PlanetController> > nestedPlanets, int startStack, int endStack, int total) { if (total == 1) { PlanetController planet = nestedPlanets [startStack].Pop(); nestedPlanets [endStack].Push(planet); bool isExist = stacks [endStack].planets.Any(x => x.name == planet.name); if (!isExist) { stacks [endStack].planets.Add(planet); } planet.MoveUp(); planet.MoveTo(endStack); planet.DropDown(); } else { int aux = 3 - startStack - endStack; dynamicTransfer(nestedPlanets, startStack, aux, total - 1); dynamicTransfer(nestedPlanets, startStack, endStack, 1); dynamicTransfer(nestedPlanets, aux, endStack, total - 1); } }