斐波那契數計算

題目

輸入一個>0的整數,輸出該位置的斐波那契數
斐波那契數參考:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368…

思路

斐波那契數爲前兩個固定,之後的遵循f(n)=f(n-1)+f(n-2)
遞歸方法:直接將算法遞歸,出口是n=1或者n=2
迭代方法:從第三個數算起,一直通過f(n)=f(n-1)+f(n-2)的方式直接計算到n
比較:迭代更快,因爲遞歸需要往返

代碼

package main
import (
	"fmt"
)
//遞歸方法
func printFbnR(n int) int {
	if n == 1 || n == 2 {
		return 1
	}else {
		return printFbn(n - 1) + printFbn(n - 2)
	}
}
//迭代方法,從第三個數開始計算,一直計算到n
func printFbn(n int) int {
	if n == 1 || n == 2 {
		return 1
	}else {
		var curr int
		//定義第1,2個數。它們是固定的
		n1, n2 := 1, 1
		for i := 3; i <= n; i++ {
		//通過前兩個數,計算第3個數一直到。。。n
			curr = n1 + n2
		//交換
			n1, n2 = n2, curr
		}
		return curr
	}
}
func main() {
	var n int
	for {
		fmt.Printf("請輸入一個大於0的整數: ")
		fmt.Scanln(&n)
		if n < 1 {
			fmt.Println("輸入錯誤!")
			continue
		}
		fmt.Printf("遞歸:%v的斐波那契數爲: %v\n\n", n, printFbnR(n))
		fmt.Printf("迭代:%v的斐波那契數爲: %v\n\n", n, printFbn(n))
	}
}

結果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章