当青训营遇上码上掘金-寻友之旅创作灵感 这个题目看到之后,我是用C语言来进行编程求解的,我的第一反应就是递归比较,所以我最初的代码也采用了递归比较的方法。 首先是明确地点不能为负,并且最多步数不会超过最初两地之间的距离,所以我的方法就是每次递归都先判断步数是否到达了上限,如果到达了步数的上限就终止这次的递归,然后判断小青是否走到了负数地点,如果走到了负数地点,这次递归也直接结束,如果递归继续,判断小青是否已经遇到了小码,如果遇到了小码并且步数小于上限,则将上限更换为此次的步数,如果小青还没有遇到小码让小青有三种选择,令小青在K节点,分别为移动到K+1节点,移动到K-1节点,移动到2*K节点,然后递归直到判断完所有情况,可以得到一个最快到达的时间。然后在编写过程中由于需要多次出现3个参数之间的大小比较,所以编写了一个min()函数来实现此功能。之后我也想到了一些可以优化运行过程的方法,例如如果小码的位置除以小青的位置的商是整数并且商是2的整数倍幂时最短的路径一定是每次2倍,即调用log2()函数可以直接得到。例如如果小青和小码的位置相距为1时,步数一定是加1最近。但是即使将这些改动在递归中进行修改,运行起来依旧十分地繁琐复杂。之后我又想到了,或许可以用两边同时进行求解,小码能进行的操作就是小青能进行的逆向操作,或许可以用贪心算法做到这一步和最后一步的同时最优就是全局最优,能够更好地达成简化代码的效果。