2016-09-13 76 views
-3

我不知道在名稱空間上聲明值與在全局聲明值相同。如何將斐波那契數字推入外部數組?

所以我想改變我的代碼,不使用全局變量。

如何在不使用全局變量的情況下跟蹤0〜20的斐波那契數?

#include <iostream> 
using namespace std; 
int Fibonacci(int num); 
namespace Fib{ 
    int arr[100]; 
    int num; 
} 
int main(){ 
    cin >> Fib::num; 
    Fibonacci(Fib::num); 
    return 0; 
} 

int Fibonacci(int n){ 
    if(Fib::num < 1) return -1; 
    int result = 0; 
    int idx; 
    result = (n == 0) ? 0 : (n == 1) ? 1 : Fibonacci(n-1) + Fibonacci(n-2); 
    Fib::arr[n] = result; 
    if(n == Fib::num){ 
     for(idx=1; idx < n+1 ; idx++){ 
      cout << Fib::arr[idx] << " "; 
     } 
     cout << endl; 
    } 
    return result; 
} 
+0

你應該真的閱讀[this](http://stackoverflow.com/questions/4211827/why-and-how-should-i-use-namespaces-in-c) – NathanOliver

+2

你應該真的閱讀[這些](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 –

+0

這不就是你使用類的原因嗎? –

回答

1

的此代碼的問題不在於命名空間的使用。它使用全局變量。 不是有無限理由使用全局變量,並且可能是一個或兩個適當的場景。這裏是而不是

+0

使用名稱空間意味着使用全局變量嗎? – nujabes

+0

@nujabes,只有當你把變量放在你的命名空間裏:) – SergeyA

+0

呵呵,那麼命名空間obj1 {int a = 5} – nujabes

-1

命名空間本質上是包。它們可以像這樣使用:

namespace MyNamespace 
{ 
class MyClass 
{ 
}; 
} 

然後在代碼:

MyNamespace::MyClass* pClass = new MyNamespace::MyClass(); 
Hope that helps. 

或者,如果你想一直使用特定的命名空間,你可以這樣做:

using namespace MyNamespace; 

MyClass* pClass = new MyClass(); 
+0

直接在名稱空間上聲明一些變量是不是很糟糕? – nujabes

+3

不以任何方式回答OP問題,而且,命名空間不是軟件包。 – SergeyA