**

斐波那契算法详解

**
**

1、斐波那契数列的一般解法:

for循环强行计算
**

#include <stdio.h>
int  main() {
int n ;
int fn = 0;
int f1, f2;
f1 = f2 = 1;
printf("请输入需要计算的第几个数:");
scanf_s("%d", &n);
if (n <= 2) {
printf(", n,f1);
//return 1;
}
else {
for (int i = 3; i <= n; i++)
{
fn = f1 + f2;
f1 = f2;
f2 = fn;
}
printf("第%d个数为%d", n, fn);
//return fn;
}
}

**

2、斐波那契数列的函数调用解法:

函数递归调用
**

#include <stdio.h>
int fa(int n) {
int fn = 0;
int f1, f2;
f1 = f2 = 1;
if (n <= 2)
return 1;
return fa(n - 1) + fa(n - 2);
}
int main() {
int n;
printf(请输入需要计算第几个数:"");
scanf_s("%d", &n);
int a = fa(n);
printf("第%d个数为%d", n, a);
return 0;
}

**

3、斐波那契数列的logn解法:

**
用的是矩阵的乘法。原理如下图:

将斐波那契数列转换成矩阵的乘法后可以使用递归对矩阵的幂进行简化以减小空间复杂度
n为偶数时:A^n = A^n/2 * A^n/2
n为奇数时:A^n = A^n/2 * A^n/2 * A
类似二分搜索,此时时间复杂度计算logn,参照主定理推论。
具体实现方法:
1、定义一个矩阵类型(使用结构体);
2、需要一个做矩阵乘法的函数,需要传入2个矩阵类型参数,这两个矩阵可能会不同(奇数时*初始矩阵)类型为矩阵型,返回值为矩阵型;
3、需要一个做递归的方法递归调用本身(里面调用2并传入好参数),这个函数需要接收初始矩阵和幂,返回进行乘法后的矩阵;
4、需要一个设置初始化矩阵的函数,此函数调用3并传入初始化的矩阵和幂,返回n次幂后矩阵的Fn;
5、主函数调用4输出4中返回值。
小伙伴可以尝试自己写出代码!
下面是我使用C语言写出来的撇脚代码。

实现代码如下:#include <stdio.h>
typedef struct JUZHEN {
int m11;
int m12;
int m21;
int m22;
}M;                     //定义矩阵类型    M CHENGFA(M m1,M m2) {
M m;
m.m11 = m1.m11*m2.m11 + m1.m12*m2.m21;
m.m12 = m1.m11*m2.m12 + m1.m12*m2.m22;
m.m21 = m1.m21*m2.m11 + m1.m22*m2.m21;
m.m22 = m1.m21*m2.m12 + m1.m22*m2.m22;
return m;
}                   //两个矩阵之间的乘法
M DIGUI(M m, int n) {       //这个函数做矩阵的幂,m为初始矩阵,n是幂
M result;                   //用于保存结果的矩阵
if (n ==1) {
return m;                   //递归出口
}
M mt = DIGUI(m, n / 2);          //A^n=A^n/2 * A^n/2
result = CHENGFA(mt, mt);
if (n % 2) {              //奇数
result = CHENGFA(m, result);       //n为奇数时,结果再乘一次初始的矩阵
}
return result;
}
int fab(int n) {
M m;           //构造初始矩阵
m.m11 = m.m12 = m.m21 = 1;
m.m22 = 0;
M m3 = DIGUI(m, n);      //这是n次幂后的矩阵
return m3.m12;             //返回Fn
}
int main() {
int n;
printf("请输入需要计算的第几个数:");
scanf_s("%d", &n);
int a = fab(n);
printf("第%d个数为%d",n, a);
}

因为以上内容直接复制于我的算法笔记,格式可能看起来很乱,小伙伴们如果要复制我的代码的话不要忘记使用代码自动对齐。(在vs中,选定代码后,按Ctrl+K+F组合键,可以自动进行代码对齐。)

斐波那契算法详解(logn)相关推荐

  1. python实现斐波那契数列详解(黄金分割)

    今天给各位分享一个常见的题目:求斐波那契数列前n项分别是什么(也称为黄金分割数列),整个数列需满足一个条件即第三项的值等于前两项相加的和,如第一项是1.第二项是1.第三项是2.第四项是 3.第五项是5 ...

  2. fibonacci斐波那契数列详解 递归求Fn非递归求Fn求n最近的斐波那契数

    斐波那契fibonacci 斐波那契额数列即前两项F(0)和F(1)都是1,之后的每一项都是前两项相加和即F(3)=2,F(4)=3,F(5)=5; 通项公式:F(n+2)=F(n+1)+F(n). ...

  3. 使用递归方法计算斐波那契数列详解

    斐波那契数列:1.1.2.3.5.8.13.21....... 首先观察数列,得出规律:f(n)=f(n-1)+f(n-2),n为位数: 其次,定义一个feibonaqie类,构造出方法,由题目易知, ...

  4. 2.数据结构与算法:斐波那契算法

    1.介绍斐波那契数列: 描述:斐波那契数列(Fibonacci sequence),指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.--在数学上,斐波那契数列以如下被以递推的方法定义 ...

  5. 斐波那契算法举例(iterative Fibonacci algorithm)

    // count_change.cpp : Defines the entry point for the console application. // #include "stdafx. ...

  6. 将真分数分解为埃及分数(斐波那契算法步骤)Java

    package com.patience.interview.huawei;import java.util.Scanner;/*** 将真分数分解为埃及分数* @author Green.Gee* ...

  7. C/C++斐波那契数全解(哪种方法更好?)

    目录 一.递归思想 二.空间换时间 三.动态规划 四.通项公式 五.矩阵快速幂 六.总结 本文章参考leetcode斐波那契数官方题解 斐波那契的边界条件是 F(0)=0 和 F(1)=1.当 n&g ...

  8. 数据结构之栈与递归的实现及应用(斐波拉契数列递归解法和strlen递归解法)

    栈与递归 程序中的"函数调用栈"是栈数据结构的一种应用. 函数调用栈一般是从高地址向低地址增长的,栈底为内存的高地址处,栈顶为内存的低地址处. 函数调用栈中存储的数据为活动记录.活 ...

  9. c语言n次方怎么输入_C语言实现斐波拉契数列

    C语言实现斐波拉契数列教程 怎么使用 C 语言实现计算斐波拉契数列的第 N 项的值? C语言实现斐波拉契数列详解 背景知识 斐波那契数列是一组第一位和第二位为 1,从第三位开始,后一位是前两位和的一组 ...

最新文章

  1. 2019~2020年终总结
  2. html中隔行的代码,js+css 控制表格隔行变色与单行高亮的代码
  3. C语言循环不执行语句,求大神来看一下 为什么for循环中scanf语句不执行?
  4. 网络中广播和多播的认识
  5. linux自学笔记--vim和文本三剑客基础
  6. 各大公司官网都有哪些显而易见的Bug?
  7. 二维分类教案_屈老师中班数学教案《有趣的笔》
  8. Radar altimeters and laser altimeters
  9. elementui表格复制_vue+element-ui做表格的导出功能(一)。
  10. CS229的简单梳理(待续)
  11. 大学生旅游风景主题dreamweaver网页设计大作业-陕西渭南HTML+CSS制作网页
  12. fiddler抓包如何只抓手机端的包 不抓电脑的包
  13. JVM深入学习(十六)-垃圾回收器的分类和性能指标
  14. 蓝牙音箱CE FCC是强制的吗
  15. Veritas NetBackup8.1.1设置备份
  16. python登录面向对象_python基础 面向对象一
  17. 理解卷积神经网络中的权值共享
  18. 深度学习-85:智慧地球/智慧城市/智慧家庭
  19. 计算机财务管理技术pdf,计算机财务管理技术在财务管理方面的应用研究.pdf
  20. Windows下SecureCRT的下载、安装、使用、配置【Telnet/ssh/Serial】

热门文章

  1. 活动报名 | 生命科学中的生成式人工智能:如何搭建生命科学的“ChatGPT”
  2. JAVA 微信 rfc3339标准格式的时间转换
  3. 等经纬度影像 转 墨卡托影像,等经纬度图片 转 墨卡托图片
  4. 7_24homework
  5. Visor Finance 攻击分析
  6. 护壁桩嵌入深度_钻孔灌注桩入岩深度
  7. 马斯克斥资440亿美元入主推特:立马踢走CEO和CFO
  8. c语言粉红色的电脑字母代码,玫瑰花c语言代码
  9. 小白玩Ubuntu——一脸懵逼到爱不释手
  10. 买了一个 RTL2832U 玩,听听电台广播,接收附近无线信号