zoukankan      html  css  js  c++  java
  • fibonacci数列的性质和实现方法

    fibonacci数列的性质和实现方法

    1.gcd(fib(n),fib(m))=fib(gcd(n,m))

    证明:可以通过反证法先证fibonacci数列的任意相邻两项一定互素,然后可证n>m时gcd(fib(n),fib(m))=gcd(fib(n-m),fib(m)),递归可

    求gcd(fib(n),fib(m))=gcd(fib(k),fib(l)),最后k=l,不然继续递归。K是通过展转相减法求出,易证k=gcd(n,m),所以gcd(fib(n),fib(m))

    =fib(gcd(n,m))。

    2.如果fib(k)能被x整除,则fib(k*i)都可以被x整除。

    3.f(0)+f(1)+f(2)+…+f(n)=f(n+2)-1

    4.f(1)+f(3)+f(5)+…+f(2n-1)=f(2n)

    5.f(2)+f(4)+f(6)+…+f(2n) =f(2n+1)-1

    6.[f(0)]^2+[f(1)]^2+…+[f(n)]^2=f(n)·f(n+1)

    7.f(0)-f(1)+f(2)-…+(-1)^n·f(n)=(-1)^n·[f(n+1)-f(n)]+1

    8.f(m+n)=f(m-1)·f(n-1)+f(m)·f(n)

    9.[f(n)]^2=(-1)^(n-1)+f(n-1)·f(n+1)

    10.f(2n-1)=[f(n)]^2-[f(n-2)]^2

    11.3f(n)=f(n+2)+f(n-2)

    12.f(2n-2m-2)[f(2n)+f(2n+2)]=f(2m+2)+f(4n-2m) [ n〉m≥-1,且n≥1]c

    3.菲波那契前n项和就是菲波那契第n+2项-1

    1. go语言之斐波那契数列的几种实现方法

      斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)

      在学习go语言基础的过程中,学习了斐波那契数列的几种实现方法,总的可以分为递归和非递归实现。本文按照用到的方法侧重点不同,现细分如下:

      • 递归实现
      • 递归实现改进
      • 数组递归实现
      • 闭包实现

    递归实现

     1 package main
     2 
     3 import "fmt"
     4 
     5 const LIM = 40
     6 
     7 func main() {
     8     //result := 0
     9     //var array []int
    10     var array [LIM]int
    11     for i := 0; i < LIM; i++ {
    12         array[i] = fibonacci(i)
    13         //result = fibonacci(i)
    14         //array = append(array, result)
    15         //fmt.Printf("fibonacci(%d) is: %d\n", i, result)
    16     }
    17     fmt.Println(array)
    18 }
    19 
    20 func fibonacci(n int) (res int) {
    21     if n <= 1 {
    22         res = 1
    23     } else {
    24         res = fibonacci(n-1) + fibonacci(n-2)
    25     }
    26     return
    27 }

    递归实现改进

    package main
    
    import "fmt"
    
    const LIM = 40
    
    var fibs [LIM]uint64
    
    func main() {
        //var result uint64 = 0
        var array [LIM]uint64
        for i := 0; i < LIM; i++ {
            array[i] = fibonacci(i)
            //result = fibonacci(i)
            //array = append(array, result)
            //fmt.Printf("fibonacci(%d) is: %d\n", i, result)
        }
        fmt.Println(array)
    }
    
    func fibonacci(n int) (res uint64) {
        // memoization: check if fibonacci(n) is already known in array:
        if fibs[n] != 0 {
            res = fibs[n]
            return
        }
        if n <= 1 {
            res = 1
        } else {
            res = fibonacci(n-1) + fibonacci(n-2)
        }
        fibs[n] = res
        return
    }
    1

    数组递归实现

    package main
    
    import "fmt"
    
    const LIM = 40
    
    func main() {
        fmt.Println(fibarray(LIM))
    }
    
    func fibarray(term int) []int {
        farr := make([]int, term)
        farr[0], farr[1] = 1, 1
    
        for i:= 2; i < term; i++ {
            farr[i] = farr[i-1] + farr[i-2]
        }
        return farr
    }
    闭包实现
    package main
    
    import "fmt"
    
    const LIM = 40
    
    func main() {
        f := fibonacci() //返回一个闭包函数
        var array [LIM]int
        for i := 0; i < LIM; i++ {
            array[i] = f()
        }
        fmt.Println(array)
    }
    
    func fibonacci() func() int {
        back1, back2 := 0, 1
        return func() int {
            // 重新赋值
            back1, back2 = back2, (back1 + back2)
            return back1
        }
    }
    
    

    该文章节选自其它博客

    https://blog.csdn.net/dangchuanbiao/article/details/71185009

    https://blog.csdn.net/qq_15571091/article/details/48528041

    巨佬的博客

    https://www.cnblogs.com/Milkor/p/4734763.html

    
    
  • 相关阅读:
    Android Bitmap 载入与像素操作
    java poi读取excel公式,返回计算值(转)
    模块化Java简介
    java模式
    java—三大框架详解,其发展过程及掌握的Java技术慨括
    java设计模式、框架、架构、平台之间的关系
    POI 怎么设置Excel整列的CellStyle啊
    POI设置EXCEL单元格格式为文本、小数、百分比、货币、日期、科学计数法和中文大写
    POI对EXCEL的操作【重点:如何设置CELL格式为文本格式】
    ActiveX插件的Z-Index属性无效问题解决
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/9445844.html
Copyright © 2011-2022 走看看