2015-11-30 44 views
1

我正在嘗試將Python中的Fibonacci算法轉換爲C++,除此之外,我在其中的大部分工作正在進行,除了我在語法上的某個地方搞砸之外。Stuck將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++代碼,以便它可以返回兩個斐波納契數字的元組?

+1

的問題是,你不能在C返回多個值作爲一個元組++的結果。實現像這樣的最好方法是使用指針 –

+1

使返回類型成爲一個元組或對,並返回{0,1} –

+3

@RNar這裏不需要指針,'std :: pair'或'std :: tuple'或'std :: array '都會很好地完成這項工作。特別是陣列。 –

回答

2

下面是使用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; 
} 
+0

非常感謝:)完美的工作! – chisquared