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

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

递归实现

 package main

 import "fmt"

 const LIM = 

 func main() {
//result := 0
//var array []int
var array [LIM]int
for i := ; 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 int) {
if n <= {
res =
} else {
res = fibonacci(n-) + fibonacci(n-)
}
return
}

递归实现改进

package main

import "fmt"

const LIM = 

var fibs [LIM]uint64

func main() {
//var result uint64 = 0
var array [LIM]uint64
for i := ; 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] != {
res = fibs[n]
return
}
if n <= {
res =
} else {
res = fibonacci(n-) + fibonacci(n-)
}
fibs[n] = res
return
}

数组递归实现

package main

import "fmt"

const LIM = 

func main() {
fmt.Println(fibarray(LIM))
} func fibarray(term int) []int {
farr := make([]int, term)
farr[], farr[] = , for i:= ; i < term; i++ {
farr[i] = farr[i-] + farr[i-]
}
return farr
}
闭包实现
package main import "fmt" const LIM = func main() {
f := fibonacci() //返回一个闭包函数
var array [LIM]int
for i := ; i < LIM; i++ {
array[i] = f()
}
fmt.Println(array)
} func fibonacci() func() int {
back1, back2 := ,
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数列的性质和实现方法的更多相关文章

  1. Fibonacci数列的性质

    Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, .... F[0] = 0; 1: gcd(Fn, Fm) = F[gcd(n, m)]; 当n - m = 1 或 2时满足, ...

  2. 斐波那契(Fibonacci)数列的七种实现方法

    废话不多说,直接上代码 #include "stdio.h" #include "queue" #include "math.h" usin ...

  3. Fibonacci 数列和 Lucas 数列的性质、推论及其证明

    Fibonacci 数列 设f(x)=1,x∈{1,2}=f(x−1)+f(x−2),x∈[3,∞)\begin{aligned}f(x)&=1,\quad\quad\quad\quad\qu ...

  4. 数学归纳法·Fibonacci数列

    数学归纳法 我们先来看一个例子: 我们让多诺米骨牌倒下的充要条件是: 第一块骨牌倒下: 假设当当前块骨牌倒下时,则他的后面一块也会倒下. 我们把这个例子给抽象出来就可以得到数学归纳法的证明过程: [第 ...

  5. 【编程题目】题目:定义 Fibonacci 数列 输入 n,用最快的方法求该数列的第 n 项。

    第 19 题(数组.递归):题目:定义 Fibonacci 数列如下:/ 0 n=0f(n)= 1 n=1/ f(n-1)+f(n-2) n=2输入 n,用最快的方法求该数列的第 n 项. 思路:递归 ...

  6. 打印Fibonacci数列方法汇总(前20项,每行5个)

    NO.1 迭代法 标签:通俗.易懂 思路:先打印第一项.再在循环里面执行fib=fib1+fib2,把fib2赋给fib1,把fib赋给fib2,每行5个可使用if函数(循环次数对5取余). #inc ...

  7. 程序员面试题精选100题(16)-O(logn)求Fibonacci数列[算法]

    作者:何海涛 出处:http://zhedahht.blog.163.com/ 题目:定义Fibonacci数列如下: /  0                      n=0 f(n)=      ...

  8. fibonacci 数列及其应用

    fibonacci 数列及其延展 fibonacci计算 fibonacci数列是指 0,1,1,2,3,5,8,13,21……这样自然数序列,即从第3项开始满足f(n)=f(n-1)+f(n-2): ...

  9. 青蛙跳台阶(Fibonacci数列)

    问题 一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级.求该青蛙跳上一个n 级的台阶总共有多少种跳法. 思路 当n=1时,只有一种跳法,及f(1)=1,当n=2时,有两种跳法,及f(2)=2,当n= ...

随机推荐

  1. Hyperledger Fabric密码模块系列之BCCSP(一)

    Fabric作为IBM主导的区块链平台,可谓是联盟链中的一枝独秀,现如今已经有100多个大型国际银行.金融以及科技公司的加盟.与其说Fabric是区块链的一种平台,倒不如说是一个区块链框架更加精确,因 ...

  2. [转]来扯点ionic3[2] 页面一线牵 珍惜这段缘

    本文转自:https://www.jianshu.com/p/de40aeb3d371 往期传送门 来扯点ionic3[0] 吹完牛再入门也不迟 来扯点ionic3[1] 创建一个新页面     上一 ...

  3. 数据库的DevOps实践

    ---------------------------------------------------------------------------------------------------- ...

  4. C# 数据库并发的解决方案(通用版、EF版)

    自ASP.NET诞生以来,微软提供了不少控制并发的方法,在了解这些控制并发的方法前,我们先来简单介绍下并发! 并发:同一时间或者同一时刻多个访问者同时访问某一更新操作时,会产生并发! 针对并发的处理, ...

  5. 【Java基础】4、java中的内部类

    内部类的分类:常规内部类.静态内部类.私有内部类.局部内部类.匿名内部类. 实例1:常规内部类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2 ...

  6. Java - ConcurrentMap原理

    https://blog.csdn.net/justloveyou_/article/details/72783008 结构是怎样的?segment是什么?hashEntry是什么?默认可并发的大小是 ...

  7. java反射与动态代理的理解

    一.什么是反射机制? 反射的官方定义是这样的:在运行状态中,对于任意的一个类,都能够知道这个类的所有属性和方法,对任意一个对象都能够通过反射机制调用一个类的任意方法,这种动态获取类信息及动态调用类对象 ...

  8. var声明变量

    var操作符定义变量将成为定义该变量作用域的局部变量 举例说明: 例子1: function test(){ var message = "hi"; //message是函数内部局 ...

  9. git 本地仓库与远程仓库建立连接

    我们在使用git clone的时候可能会报错: Could not read from remote repository.Please make sure you have the correct ...

  10. MySQL安装的挫折之路

    由于对MySQL卸载的不干净,mysql 的MySQL Connector Net/xxx无法卸载,后期重装无法成功.所以只能采用zip 安装https://www.cnblogs.com/Micha ...