初学者在汉诺塔问题中遇到的问题

img

img

img

img


我是一个c语言的初学者,我想要问几个问题,希望有人能解答一下
这个是汉诺塔问题的代码
1.为什么这个形参的顺序不同,就对代码结果有那么大的影响呢
2.这个printf里面明明也没有b,为什么会出现c呢
3.在第一张图片中void toh()里面的东西都是什么意思
4.代码结果中,为什么会出现b到c呢
前四个差不多懂了,还有就是这第五个
5.那里面的abc三个字母的顺序为什么要这样设计呢

  • 以下回答由chatgpt基于相关博客总结生成:

    问题标题: 汉诺塔问题中初学者遇到的具体问题的解答

    问题内容: 作为一名初学者,我在解决汉诺塔问题时遇到了几个具体问题,希望能够得到解答。

    1. 为什么函数参数的顺序不同会对代码的结果产生如此大的影响呢? 可以解释一下原因吗?

    函数参数的顺序决定了函数在使用时传入数据的顺序,而函数内部的操作可能依赖于参数的顺序。如果函数内部对参数的使用依赖于参数的顺序,那么调换参数的顺序会导致函数的行为发生变化,从而影响代码的结果。因此,函数参数的顺序对代码的结果产生影响。

    1. 我在这段代码中看到了一个奇怪的现象,就是在printf语句中只定义了c,为什么输出结果会包含b呢? 可以给予解释吗?

    在这段代码中,printf的参数中只是定义了c,但是输出结果中包含了b。这是因为在C语言中,printf函数的参数是按照顺序压栈的。当我们给printf函数传入多个参数的时候,从右至左的顺序将参数入栈。所以,printf("%d, %d\n", c, b)的参数入栈顺序是先入栈c,再入栈b。因此,在输出结果中,c对应的是第一个%db对应的是第二个%d

    1. 在第一张图片中的void toh()函数中,我看到了一些我不太理解的内容,请问这些内容到底是什么意思呢?

    在第一张图片中,void toh()函数是解决汉诺塔问题的递归算法。其中出现的ABC代表的是三个塔座,他们分别用来表示源塔座、辅助塔座和目标塔座。n代表要移动的盘子数量,toh()函数通过递归的方式将n个盘子从源塔座移动到目标塔座。

    1. 在代码的输出结果中,我注意到出现了将盘子从b移动到c的操作,请问这是为什么呢?

    在汉诺塔问题中,我们希望将n个盘子从源塔座移动到目标塔座,在移动过程中可以利用辅助塔座。移动的规则是每次只能将一个盘子从一个塔座移动到另一个塔座,并且不能将大盘子放在小盘子上面。在解决汉诺塔问题的递归算法中,盘子的移动需要遵循这个规则。所以,在输出结果中,将盘子从辅助塔座b移动到目标塔座c是为了保证盘子的移动规则。

    希望以上解答能帮助您更好地理解汉诺塔问题和C语言编程。如果还有任何问题,请随时提问。

你的问题都没问到点子上啊。你先理解一下,函数的形参和实参的区别,什么叫做递归。