Go指南練習_斐波納契閉包


源地址 https://tour.go-zh.org/moretypes/26

一、題目描述

讓我們用函數做些好玩的事情。

實現一個 fibonacci 函數,它返回一個函數(閉包),該閉包返回一個斐波納契數列 `(0, 1, 1, 2, 3, 5, ...)`。

 

二、題目分析

  • 要實現一個fibonacci函數;
  • 使該函數返回一個閉包;
  • 該閉包再返回一個斐波那契數列;
  • 閉包函數會引用函數體以外的值,可以對其修改。

 

三、Go代碼

package main

import "fmt"

// fibonacci is a function that returns
// a function that returns an int.
func fibonacci() func() int {
    back1, back2:= 0, 1  // 預先設定好兩個初始值

    return func() int {
        
        temp := back1 //記錄(back1)的值      
        back1,back2 = back2,(back1 + back2) // 重新賦值(這個就是核心代碼)        
        return temp //返回temp
    }    
}

func main() {
    f := fibonacci()  //返回一個閉包函數
    for i := 0; i < 10; i++ {  //打印斐波納契數列
        fmt.Println(f())
    }
}

 運行結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM