zoukankan      html  css  js  c++  java
  • 斐波拉契序列的 Go 实现


    本篇文章主要介绍斐波拉契序列的 Go 语言实现。

    斐波拉契序列: 前面相邻两项之后构成后一项。

    1. 循环迭代

    package main
    
    import "fmt"
    
    const maxSize = 20
    
    func fibonacci(fs *[maxSize]int) {
    	fs[0] = 0
    	fs[1] = 1
    	for index := 2; index < maxSize; index++ {
    		fs[index] = fs[index-1] + fs[index-2]
    	}
    }
    
    func main() {
    	var fibSequence [maxSize]int
    
    	fibonacci(&fibSequence)
    	fmt.Printf("fibonacci sequence: %v
    ", fibSequence)	
    }
    

    执行结果:

    fibonacci sequence: [0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181]
    

    2. 递归调用

    package main
    
    import "fmt"
    
    const maxSize = 20
    
    func fibonacci_rec(n int) int {
    	// Go 不支持三元表达式: https://golang.org/doc/faq#Does_Go_have_a_ternary_form 
    	if n < 2 {
    		if n == 0 {
    			return n
    		} else {
    			return n
    		}
    	}
    
    	return fibonacci_rec(n-1) + fibonacci_rec(n-2)
    }
    
    func main() {
    	var fibSequence [maxSize]int
    
    	for index := 0; index < maxSize; index++ {
    		fibSequence[index] = fibonacci_rec(index)
    	}
    	fmt.Printf("fibonacci sequence: %v
    ", fibSequence)
    }
    

    代码介绍:

    • 递归函数: 直接调用自己或者间接调用自己的函数,递归要有退出条件防止陷入无限递归中。
    • 递归符合栈的数据结构。在前行阶段对每一层递归,函数的局部变量,参数值以及返回地址都被压入栈中。在退回阶段,位于栈顶的局部变量,参数值和返回地址被弹出,用于返回调用层次中执行代码的其余部分,也就是恢复了调用状态。
    芝兰生于空谷,不以无人而不芳。
  • 相关阅读:
    Leetcode_02【两数相加】——【难度:中】
    Leetcode_39【组合总和】
    Leetcode_38【报数】
    Leetcode_36【有效的数独】
    Leetcode_35【搜索插入位置】
    51nod1347 旋转字符串
    WebH
    ExcelHelper
    文件二进制与String相互转换
    汇编语言里 eax, ebx, ecx, edx, esi, edi, ebp, esp
  • 原文地址:https://www.cnblogs.com/xingzheanan/p/14674225.html
Copyright © 2011-2022 走看看