long hanoi_count = 0;//记录移动的次数 public IActionResult HanNuoTa() { return View(); } [HttpPost] public IActionResult HanNuoTa(int num) { try { if (num<1) { throw new Exception("请输入大于1的整数。"); } StringBuilder sb = new StringBuilder(); Stopwatch sw = new Stopwatch(); sw.Start(); Hanoi(num, 'A', 'B', 'C', sb); sw.Stop(); sb.Append($"<div>耗时:{sw.ElapsedMilliseconds} 毫秒</div>"); return Content(sb.ToString()); } catch (Exception ex) { return Content("出错:" + ex.Message); } } /// <summary> /// 汉诺塔递归 /// </summary> /// <param name="n">汉诺塔圆盘数量</param> /// <param name="a">a柱名称</param> /// <param name="b">b柱名称</param> /// <param name="c">c柱名称</param> /// <param name="sb">移动步骤字符串</param> void Hanoi(int n, char a, char b, char c, StringBuilder sb) { if (n==1) { sb.Append($"<div>第 {++hanoi_count} 次:{a} 柱 --> {c} 柱</div>"); } else { Hanoi(n - 1, a, c, b,sb); sb.Append($"<div>第 {++hanoi_count} 次:{a} 柱 --> {c} 柱</div>"); Hanoi(n - 1, b, a, c,sb); } }