无法将 Python 算法翻译成 C++

Posted

技术标签:

【中文标题】无法将 Python 算法翻译成 C++【英文标题】:Stuck translating a Python algorithm into C++ 【发布时间】:2015-11-30 19:23:36 【问题描述】:

我正在尝试将我在 Python 中的斐波那契算法翻译成 C++,除了我在语法上的某个地方搞砸了之外,我大部分都可以工作。

这是我目前拥有的 Python 版本:

if n == 0:
    return (0, 1) *****
else:
    a, b = _fib(n // 2)
    c = a * (b * 2 - a)
    d = a * a + b * b
    if n % 2 == 0:
        return (c, d) *****
    else:
        return (d, c + d) *****

这就是我将它翻译成 C++ 的方式

int fib2(int n) 
 if (n == 0) 
    return (0, 1); *****
 
 else 
    int a = fib2(n/2);
    int b = fib2(n/2);
    int c = a*(2*b-a);
    int d = a*a + b*b;
    if (n % 2 == 0) 
        return (c, d); *****
    
    else 
        return (d, c + d); *****
    
 

我在错误的来源处打了 5 颗星。如果我理解正确,在 Python 版本中,它会返回两个斐波那契数对。但是,当我在 C++ 中尝试相同的语法时,它会显示“预期表达式”。

我明白为什么会发生这种情况,有谁知道我可以如何更正我的 C++ 代码,以便它也可以返回一个包含两个斐波那契数的元组?

【问题讨论】:

问题是你不能在 c++ 中将多个值作为元组返回。实现这样的最好方法是使用指针 将返回类型设为元组或对,并返回 0, 1 @RNar 这里不需要指针,std::pairstd::tuplestd::array<int, 2> 都会很好地完成这项工作。尤其是数组。 ^ 或者那个。我不太精通标准 C++ 类型 @BaummitAugen 您好,感谢您的建议!它在大多数情况下都有效,我不再收到关于返回这对数字的编译错误。现在我收到一条错误消息,说当它试图计算 a 和 b 时,没有可行的转换将 'int' 转换为 'array'。我知道它有问题,因为 fib2 现在返回一个数组,但我将 a 声明为 int。有没有简单的方法来解决这个问题? 【参考方案1】:

以下是使用std::pair的结果

#include <iostream>
#include <utility>

using namespace std;

typedef pair<int,int> myPair;

myPair fib2(int n) 

    if (n == 0)            return make_pair(0, 1); 
    myPair r = fib2(n/2);
    int a = r.first;
    int b = r.second;
    int c = a*(2*b-a);
    int d = a*a + b*b;
    if (n % 2 == 0)        return make_pair(c, d); 
    else                   return make_pair(d, c + d); 


int main()

    myPair result = fib2(12);
    cout << "result:" << result.first << endl;

【讨论】:

以上是关于无法将 Python 算法翻译成 C++的主要内容,如果未能解决你的问题,请参考以下文章

无法将目标 C 代码段翻译成 Swift

伪代码翻译?

将 python 行翻译成 c++ opencv

将Python的库路径添加到系统环境变量PYTHONPATH中,如python安装在C:PYTHO

如何在不使用 numpy 的情况下计算 python 中的标准偏差?

解释 1 行 C 代码并将其翻译成 Python [重复]