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
-
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