c++ - 从 num1 到 num2 的最短路径(在 C++ 中)

标签 c++ recursion

<分区>

我需要编写一个函数(在 C++ 中)获取两个整数 (>0) (n1,n2)。 我只能做两件事:

  • 将 1 加到 n1。
  • 将 n1 乘以 2。

函数返回从n1到n2的最短路径的步数。 你能告诉我怎么做吗?

谢谢!

附言 如果不可能,函数返回 -1。

这里是我尝试过的:

if (n1<n2)
{
    n1++;
    if ((n1)*2<=n2)
        return 2+f(n1*2,n2);
    else
        return 1+f(n1,n2);
}

最佳答案

我想最好把问题反过来:从 n2 到 n1 有这两个设置:

  • 减1
  • 除以 2(仅当结果为整数时)

通过这种方式,当您第一次尝试将数字除以 2 时,您可以找到最大的步骤,如果不可能,则减去 1(之后除法有效)。继续这样做,直到达到 n1(或更低的值,之后您只能使用“减少步长”,因此基本上已经知道所需的步数)

我想你可以自己实现这个算法......

关于c++ - 从 num1 到 num2 的最短路径(在 C++ 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14536923/

相关文章:

java - Socket Java 到 C++ - 消息的长度始终为 8192 个字符

java - 带有矩阵和递归的考试练习示例

c++ - C++中退出递归栈

algorithm - 在递归算法和事件驱动的消费者之间进行协调的模式

c++ - 在 C++ 中模拟 C# 索引器

c++ - 传递数组时从 'int' 到 'int*' [-fpermissive] 的无效转换

c++ - 为什么向上转换有效但向下转换会产生编译时错误?

c# - 使用 "return"时如何在 block 外访问任何变量?

java - 以 boolean 值作为返回值的递归方法来计算数字中的数字

python - python中的递归正则表达式?