class Program { private static void Fun(int x, int n, Stack<int> stack, List<int> outList,ref int count) { if (outList.Count == n) { count++; Console.WriteLine(string.Join(',', outList)); } if (x <= n) { stack.Push(x); Fun(x + 1, n, stack, outList, ref count); stack.Pop(); } if(stack.Count > 0) { var temp = stack.Peek(); stack.Pop(); outList.Add(temp); Fun(x, n, stack, outList, ref count); stack.Push(temp); outList.RemoveAt(outList.Count - 1); } } static void Main(string[] args) { int n; string nStr; while (true) { while (true) { Console.WriteLine("輸入一個正整數:"); nStr = Console.ReadLine(); if (int.TryParse(nStr, out n)) { break; } } var stack = new Stack<int>(); var outList = new List<int>(); int count = 0; Fun(1, n, stack, outList, ref count); Console.WriteLine($"總計{count}種出棧方式。"); } } }