wi lsong 2023-04-13 21:54 采纳率: 60%
浏览 21
已结题

调用的这个语句中if语句这里计算机到底是是怎么一步一步运行的啊,以n=4为例

package diqijiangzuoye;

import java.util.Scanner;

public class Hannuota {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner input=new Scanner(System.in);
    System.out.println("请输入盘子数n=");
    int n=input.nextInt();
    System.out.println("移动过程为:");
    moveDisks(n,'A','B','C');
}

private static void moveDisks(int n, char fromA, char toB, char auxC) {
    if(n==1)
        System.out.println(n+"号盘从"+fromA+"-->"+toB);
    else {
        moveDisks(n-1,fromA,auxC,toB);
        System.out.println(n+"号盘从"+fromA+"-->"+toB);
        moveDisks(n-1,auxC,toB,fromA);
    }
    
}

}

  • 写回答

3条回答 默认 最新

  • 社区专家-Monster-XH 2023-04-13 22:26
    关注

    基于Monster 组和GPT的调写:

    • 这段代码是汉诺塔问题的递归解法,它使用了递归函数 moveDisks 来解决问题。这个函数用来将从 fromA 柱子上编号为 1 到 n 的盘子移动到 toB 柱子上,借助 auxC 柱子。

    下面是以 n=4 为例的 moveDisks 函数的执行流程:

    • 第一次调用 moveDisks(4, 'A', 'B', 'C'),由于 n 不为 1,进入 else 分支。

    • 调用 moveDisks(3, 'A', 'C', 'B'),同样进入 else 分支。

    • 调用 moveDisks(2, 'A', 'B', 'C'),同样进入 else 分支。

    • 调用 moveDisks(1, 'A', 'C', 'B'),这次 n 为 1,进入 if 分支,输出 "1号盘从A-->C"。

    • 返回第 4 步的调用,输出 "2号盘从A-->B"。

    • 再次调用 moveDisks(1, 'C', 'B', 'A'),同样进入 if 分支,输出 "1号盘从C-->B"。

    • 返回第 3 步的调用,输出 "3号盘从A-->C"。

    • 调用 moveDisks(1, 'B', 'A', 'C'),同样进入 if 分支,输出 "1号盘从B-->A"。

    • 返回第 2 步的调用,输出 "4号盘从A-->B"。

    • 再次调用 moveDisks(1, 'A', 'C', 'B'),同样进入 if 分支,输出 "1号盘从A-->C"。

    • 返回第 1 步的调用,程序结束。

    因此,最终输出的结果为:

    1号盘从A-->C
    2号盘从A-->B
    1号盘从C-->B
    3号盘从A-->C
    1号盘从B-->A
    2号盘从B-->C
    1号盘从A-->C
    4号盘从A-->B
    1号盘从C-->B
    2号盘从C-->A
    1号盘从B-->A
    3号盘从C-->B
    1号盘从A-->C
    2号盘从A-->B
    1号盘从C-->B

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月22日
  • 已采纳回答 4月14日
  • 创建了问题 4月13日

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大