比特币斐波那契数列算法
1. 斐波那契数列用伪代码表示第20个数的算法
通项公式为:(1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}【√5表示根号5】 #include<stdio.h>
void Fdt(long F1,long F2,int N);//递推
void Fdg(long F1,long F2,int N);//递归
main()
{
int n=20;
long f1,f2;
f1=f2=1;
Fdt(f1,f2,n);
printf(" ");
Fdg(f1,f2,n);
}
void Fdt(long F1,long F2,int N)//递推
{
for(int i=1;i<=N;i++)
{
printf("%12ld %12ld",F1,F2);
if(i%2==0)
printf(" ");
F1=F1+F2;
F2=F1+F2;
}
}
void Fdg(long F1,long F2,int N)//递归
{
if(N>=1)
{
printf("%12ld %12ld",F1,F2);
if(N%2==0)
printf(" ");
Fdg(F1+F2,F1+F2+F2,N-1);
}
}
(1)比特币斐波那契数列算法扩展阅读:
从第二项开始,每个偶数项的平方都比前后两项之积多1,每个奇数项的平方都比前后两项之积少1。如:第二项 1 的平方比它的前一项 1 和它的后一项 2 的积 2 少 1,第三项 2 的平方比它的前一项 1 和它的后一项 3 的积 3 多 1。
(注:奇数项和偶数项是指项数的奇偶,而并不是指数列的数字本身的奇偶,比如从数列第二项 1 开始数,第 4 项 5 是奇数,但它是偶数项,如果认为 5 是奇数项,那就误解题意,怎么都说不通)
2. 斐波那契数列的递归算法求解第6项时,总共需要调用 次fib函数
//要知道在第六项时、总共调用了几次fib函数,就在里面打印就知道了。。。
//F12,浏览器控制台Console、复制粘贴下列代码、回车运行就可以看到结果了。。。
varcount=0;
varfib=function(n){
console.log("第"+(++count)+"次调用fib");
if(n==0){
return0;
}
elseif(n==1||n==2){
return1;
}elseif(n>2){
returnfib(n-1)+fib(n-2);
}
}
fib(6);
3. 斐波那契数列算法的源程序
代码如下。。。我测试过了。。。
public class Fibonacci {
/**
* 计算Fibonacci数列,使用递归
* @param n 计算第n个Fibonacci数列值
* @return 第n个Fibonacci数值
*/
public static int fibonacci(int n){
if(n<=1)
return n;
else
return fibonacci(n-1) + fibonacci(n-2);
}
public static void main(String[] args) {
for(int i = 0;i<=5;i++)
System.out.print(fibonacci(i)+",");
}
}
希望对你有帮助。。。。仍有问题可以HI我。。。
4. 斐波那契数列任意项 高效算法的思路是什么
递归速度很慢的原因是:
每个函数占用一个栈,开辟栈是要时间的。
减少栈的开辟。
少用递归算法。
反其道而为之。
5. 斐波那契数列,第二十个数的算法。(用循环语句)
//斐波那契数列
List<Integer>list=newArrayList<>();
inta=1,b=2,n=20;
list.add(a);
list.add(b);
//An=A(n-1)+A(n-2)
for(inti=0;i<20;i++){
list.add(list.get(i)+list.get(i+1));
}
//输出
System.out.println(list.get(n-1));
6. 斐波那契数列算法
Private Function f(ByVal n As Integer) As Double'斐波那契的n项的值
Dim r As Double
If n = 0 Then
r = 0
End If
If n = 1 Then
r = 1
End If
If n > 1 Then
r = f(n - 1) + f(n - 2)
End If
f = r
End Function
7. [数据结构与算法分析]斐波那契数列递归算法时间复杂度为多少
longfab(longn)
{
if(n<2)return1;
returnfab(n-1)+fab(n-2);
}
简单推断一下,当n>2时,递归调用的次数call_fab(n) = 2*fab(n) - 1,再简单证明一下。
用call_fab(n)代表递归调用的次数
n = 3时,调用fab(3),会递归调用fab(1)和fab(2),而fab(1)和fab(2)只需要调用一次,加上本身一次,一共调用3次,而fab(3) = 2,3 = 2 * 2 - 1,满足推断
n = 4时,fab(4) = fab(3) + fab(2),所以call_fab(4) = 1 + call_fab(3) + call_fab(2) = 5
fab(4) = 3,满足5 = 3 * 2 - 1
同理n=5也可以简单计算得出,这样我有连续3个结果,作为归纳法证明的基础
假设n = k(k >= 5)成立,即
fab(k) = fab(k-2) + fab(k - 1),有call_fab(k) = 2fab(k) - 1
那么当n=k+1时,fab(k+1) = fab(k - 1) + fab(k),
call_fab(k+1) = 1 + call_fab(k - 1) + call_fab(k) = 1 + 2fab(k-1) - 1 + 2fab(k) - 1
= 2(fab(k-1) + fab(k)) - 1 = 2fab(k+1) - 1,归纳法得证。
所以,对于大于2的整数n,其斐波那契数列递归算法的调用次数为2*n的斐波那契数列值 - 1,故答案是D,时间复杂度和该数列是一致的。
8. 写出求斐波那契数列第10个数的一个算法
F(n)=(1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}
这是通项公式
最简单的C语言编法
long fib[10]
int i;
for(i=2;i<10;i++)
{
fib[i ] = fib[i-1]+fib[i-2];
}
printf fib[10];
用中文?就是斐波那契数列的第n项等于第n-1项与第n-2项的和,就是根据这个进行递归算法的啊
9. 斐波那契数列递归算法是什么
斐波那契数列递归算法是斐波那契数列的一种算法,又称为黄金分割数列,其算法规律为F(n)=F(n-1)+F(n-2)。
由于是以兔子的繁殖为例子引入的,因此也叫“兔子数列”。它指的是这样一个数列:0、1、1、2、3、5、8、13……,从这组数可以很明显看出这样一个规律:从第三个数开始,后边一个数一定是在其之前两个数的和。
可以用以下两种非递归算法来实现:
1、时间复杂度为O(N),空间复杂度为O(N):
创建一个数组,每次将前两个数相加后直接赋给后一个数。这样的话,有N个数就创建一个包含N个数的一维数组,所以空间复杂度为O(N);由于只需从头向尾遍历一边,时间复杂度为O(N)。
2、时间复杂度为O(N),空间复杂度为O(1):
借助两个变量 first 和 second ,每次将 first 和 second 相加后赋给 third ,再将 second 赋给 first ,third 赋给 second,如此循环。
10. 斐波那契数列的算法
#include "stdio.h"
main()
{
long f1,f2;
int i;
f1=f2=1;
for(i=1;i<=20;i++)
{
printf("%12ld %12ld",f1,f2);
if(i%2==0) printf("\n"); /*控制输出,每行四个*/
f1=f1+f2; /*前两个月加起来赋值给第三个月*/
f2=f1+f2; /*前两个月加起来赋值给第三个月*/
}
}
原题是:有一对兔子从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?>