1. 程式人生 > >再談 迴圈/遞迴就是狀態機

再談 迴圈/遞迴就是狀態機

狀態是相關變數的組合狀態,一個變數相當於狀態的一個分量

一次迴圈就是一輪狀態轉移(state transition)

初始狀態 -> 按某種規則轉移,有些狀態屬於終止狀態,然後狀態的某個變數就是所求

當前狀態下,各個變數間互動,遷移,達到另一個狀態,狀態機的一般形式是 while (true) { //轉移規則}, for (int i = 0; i < n; ++i ) {}這種是說,i這個狀態分量每一輪的轉移是固定的(++i),並且i == n 是觸發狀態機stop的方式之一。 狀態機停止的一般形式是在轉移的規則裡的break或者 return

int state1 = 0, state2 = 1; //state initialization

while (true) {
	// current state is one of the stop states ?
	// if yes, stop , and the state of some of the variables will the reuslt
	if (state1 == 10) break;
	
	// if not, do state transition
	(state1, state2) = transition(state1, state2);
}

return state2; // the state of some of the variables will the reuslt


一個程式可以是多個狀態機,比如atoi的實現,可以是一個複雜的狀態機,也可以是多個狀態機串聯,第一個處理字首空格,第二個處理字首+-號,第三個處理值。然後每個都相對簡單(轉移規則少)