使用棧(非遞迴方法)解決斐波那契數列問題
阿新 • • 發佈:2019-02-10
解決斐波那契數列問題可以使用遞迴,迭代,以及使用棧等方法,下面講述使用棧的方法。
首先,我們從數列的遞迴呼叫樹就可以發現一些資訊。
要求第n個斐波那契數,就要向左下和右下走兩步。所以使用結構體,其中dir表示向左還是向右,1為向左,0為向右。
struct node
{
int value; //代表要求的第x個數
int dir;
};
採用累加的方式算出結果:當value為1時加1,為0時加0. 注意:左邊是n-1,而右邊是n-2.
int StackFib(int n) { node w; stack<node> s; int sum = 0; while (1) { while (1) { w.value = n; w.dir = 1; s.push(w); n--; if (n < 0) break; } while (!s.empty()) { w = s.top(); s.pop(); if (w.value == 0) sum += 0; else if (w.value == 1) sum += 1; else if (w.value != 0 && w.value != 1 && w.dir == 1) { w.dir = 2; s.push(w); n = w.value-2; break; } } if (s.empty()) break; } return sum; }