2016-09-13 79 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