Barry YU
5 min readJul 14, 2020

--

編寫流程:虛擬碼(Pseudocode)費波那契(Fibonacci )函式

在過去有記錄編碼是用『 流程圖 - 演算法 』:

適合用簡單的運算式.

當現在越是複雜的演算出現時, 就取而代之的出現了

虛擬碼 Pseudocode

「 主要目的還是為了邏輯的表達與溝通. 」

「 虛擬碼只是幫助我們思考解題的一個步驟 」

它是一種思考的過程與表達方法

基本上也沒有規定一定要怎麼寫.

虛擬碼的撰寫重點

參考註解方式 「 虛擬碼 (Pseudocode):

  1. 以英文撰寫
  2. 一句話對應到一個程式指令
  3. 關鍵字大寫(比如 IF, ELSE, FOR 等)
  4. 使用縮排,表達前後兩句陳述的推進關係

5. 沒有硬性規定一定要怎麼寫

Mozilia.org 常看到很多[ 虛擬碼 ]註解, 為什麼是中文呢?

[ — 基本上沒有規定一定要怎麼寫 — ]

本人初學時常常用英文註解虛擬碼, 往回頭看不知道在表達什麼

如果是團隊朋友看到肯定會非常痛苦. 你細共蝦???

每個人英文程度不一樣, 解讀英文方式會不一樣.

中文比較可以避免這問題

小小建議 : 如果是開發團隊建議有個「 統一規格 」虛擬碼

建議 2 : 一句話對應到一個程式指令! 『統一規格』

建議3 : 使用 駱駝碼編譯 程序 ! 強推!

examInterview , examFibonacci , barryInterview , barryInterviewExam ,,,,somthing likt this … first Word is lowerCase.

EXAMPLE : Interview Exam

寫出函式:費波那契數列

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233⋯⋯

拆解問題 :

陣列[0] [1] 是屬於一組, 相加等於陣列[ 2]

0+1=1 以此類推 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233⋯⋯

蒐集資料和方法:

  1. 參考網站或參考書
  2. 函數建立 & 定義變數 (陣列)
  3. 陣列物件使用 &加入迴圈公式
  4. 使用虛擬碼 : 因為複雜度關係,

費波那契(Fibonacci )函式

不適合用“ 演算法 — 流程圖“

建立函數 & 程式流程

1. 建立函數:

function fib ( number ) { } or ( number ) =>{ } 匿名函數

本篇用function name ( X)

1–1. 定義變數

const arr = [ 0 , 1 ] ;

arr = value 0 , value 1 ….//怕讀者看不懂,所以這樣舉例

/// 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233 , 取0 和 1 作為初始陣列

1–2. 陣列物件 push

將結果透過push 放置到陣列尾端 . 慢慢遞增 .

1–3. 使用迴圈 for ,,, //避免無限迴圈.

將 陣列 [0 ] + [1] 相加後, 等於 [ 3 ] 透過 Push 物件工具, 增加一次陣列

第一次回圈 const arr = [ 0 , 1 , 2 ] , Push 第二次回圈 const arr = [ 0 ,1 ,2 ,3 ]

for ( index = 2 , index ≤ number ; index ++ )

開始頁位置 : 定義變數 let index =2

將 index 指定 arr = [ 0 ,1 ]

回圈遞增:相加 index ++

從index 2 +1 = index 3 +1 =index4 +1 >>>以此類推

迴圈停止:結束位置 index ≤ number

從陣列[ 2 ]開始至 number 為止 , 讓index ++ 遞增停止

加入迴圈, 實現遞增啟動

for ( i =2 ; index < = number ; i ++ )

1–4 . 用簡單數學公式- 定義 a 和 b 位置, 並將公式加入迴圈

//leta = 2–1 = 1 arr[1]

//letb = 2–2 = 0 arr[0]

let a = arr[i -1]; 陣列[1]

let b = arr[i - 2]; 陣列[0]

加入迴圈

for ( i =2 ; index < = number ; i ++ ) { // let a  let b 每一次迴圈遞增一次位置. let a = arr[i -1]  
let b = arr[i -2]

1–5. 每次取得的新陣列Push 入尾端的陣列:

arr [ 0 , 1 ] 迴圈後 arr [ 0 ,1 ,2 ] , 迴圈後 arr [0 ,1 ,2 ,3 ] 直到結束為止…

直到 index = number 迴圈結束.

arr.push (a+b )

for ( i =2 ; index < = number ; i ++ ) {// let a  let b 每一次迴圈遞增一次位置.let a = arr[i -1]  
let b = arr[i -2]
arr.push (a+b )
}

將 a 陣列位置的value 加上 b 陣列位置的value

2.虛擬碼(Pseudocode):

英文撰寫 :

--

--