Fork me on GitHub
打赏

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())
    }
}

 运行结果

 

posted @ 2018-06-22 09:55  Zoctopus_Zhang  阅读(3535)  评论(0编辑  收藏  举报
// function btn_donateClick() { var DivPopup = document.getElementById('Div_popup'); var DivMasklayer = document.getElementById('div_masklayer'); DivMasklayer.style.display = 'block'; DivPopup.style.display = 'block'; var h = Div_popup.clientHeight; with (Div_popup.style) { marginTop = -h / 2 + 'px'; } } function MasklayerClick() { var masklayer = document.getElementById('div_masklayer'); var divImg = document.getElementById("Div_popup"); masklayer.style.display = "none"; divImg.style.display = "none"; } setTimeout( function () { document.getElementById('div_masklayer').onclick = MasklayerClick; document.getElementById('btn_donate').onclick = btn_donateClick; var a_gzw = document.getElementById("guanzhuwo"); a_gzw.href = "javascript:void(0);"; $("#guanzhuwo").attr("onclick","follow('33513f9f-ba13-e011-ac81-842b2b196315');"); }, 900);