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. flask数据库迁移理解及命令

    前言: 使用数据库迁移,可以直接建表,而不用我们自己写sql语句用来建表.就是将关系型数据库的一张张表转化成了Python的一个个类. 在开发中经常会遇到需要修改原来的数据库模型,修改之后更新数据库, ...

  2. [SDOI2010] 外星千足虫

    Description 公元2089年6月4日,在经历了17年零3个月的漫长旅行后,"格纳格鲁一号"载人火箭返回舱终于安全着陆.此枚火箭由美国国家航空航天局(NASA)研制发射,行 ...

  3. [转]Building a REST-Backend for Angular with Node.js & Express

    本文转自:https://malcoded.com/posts/angular-backend-express Angular is a single page application framewo ...

  4. (转)分享一个技巧,利用批处理调用ruby脚本(可能你为路径苦恼)

    #关闭命令显示 @echo off #提示信息 echo Now,listing the controller,please not shutdown the DOS File! #切换到当前路径,. ...

  5. ASP.NET上传时间超过4M失败(超时)的解决方法

    https://blog.csdn.net/shan1774965666/article/details/20836851 在web.config中的<system.web></sy ...

  6. git+github/码云+VSCode (转载)

    VSCode中使用git,参见. Git安装   在初次使用时如果本地没有安装git会提示先安装git,然后重启vscode. 一.本地操作项目前提: 1)若本地没有git拉取下来的项目,用git克隆 ...

  7. [PHP] 算法-数组归并排序并计算逆序对的个数的PHP实现

    在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%100000000 ...

  8. 【Java】HashMap源码分析——常用方法详解

    上一篇介绍了HashMap的基本概念,这一篇着重介绍HasHMap中的一些常用方法:put()get()**resize()** 首先介绍resize()这个方法,在我看来这是HashMap中一个非常 ...

  9. System.arraycopy 怎么使用的?

    前言:看 ArrayList 的源码,发现 remove 方法主要依赖了 System.arraycopy() 方法实现的.所以需要了解一下这个方法如何使用.转载请注明出处:https://www.c ...

  10. blfs(systemd版本)学习笔记-wget的安装与配置

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! blfs wget项目地址:http://www.linuxfromscratch.org/blfs/view/stable-s ...