码迷,mamicode.com
首页 > 其他好文 > 详细

fibonacci数列的性质和实现方法

时间:2018-08-08 22:03:24      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:斐波那契数   学习   res   n+2   const   黄金分割   pack   ati   check   

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


 

fibonacci数列的性质和实现方法

标签:斐波那契数   学习   res   n+2   const   黄金分割   pack   ati   check   

原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/9445844.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!