最近学习了一个叫递归的概念,里面最著名的一个例子就是斐波那契问题,觉得很有意思,就来实现一下:

什么是斐波那契数列

  斐波那契数列,又称黄金分割数列,值得这样一个数列:0、1、1、3、5、8、13、21、34、……在数学上,斐波那契数列以如下形式递归方法定义:



  这是一个线性递推数列。

递归实现方式:

Demo:

  1. #include <stdio.h>
  2. //recursive fibonacci
  3. int rec_fibo(int n)
  4. {
  5. if(n == 1 || n == 2)
  6. return 1;
  7. if(n > 2)
  8. return (rec_fibo(n - 2) + rec_fibo(n - 1));
  9. }
  10. int main(void)
  11. {
  12. int n = 0;
  13. //提醒user输入
  14. printf("please input you want to test number:\n");
  15. scanf("%d", &n);
  16. int fi_num = 0;
  17. //调用rec_fibo()函数
  18. fi_num = rec_fibo(n);
  19. //向屏幕输出
  20. printf("F[%d] = %d\n", n, fi_num);
  21. return 0;
  22. }

非递归实现方式:

Demo:

  1. //fibonacci non-recursive implementation
  2. int non_rec_fibo(int n)
  3. {
  4. //定义一个临时储存数组来存储
  5. int temp[2];
  6. //分别给0,1下标的数组赋初值
  7. temp[0] = 1;
  8. temp[1] = 1;
  9. int i = 0;
  10. if(n == 1 || n == 2)
  11. return 1;
  12. else
  13. {
  14. for(i = 2; i < n; i++)
  15. {
  16. //进行数组内部的数据转换
  17. int tp = temp[0] + temp[1];
  18. temp[1] = temp[0];
  19. temp[0] = tp;
  20. }
  21. return temp[0];
  22. }
  23. }
  24. int main(void)
  25. {
  26. int n = 0;
  27. printf("please input you want to test number:\n");
  28. scanf("%d", &n);
  29. int fi_num = 0;
  30. fi_num = non_rec_fibo(n);
  31. printf("F[%d] = %d\n", n, fi_num);
  32. return 0;
  33. }

  ok这里已经完整的说明了斐波那契数列的两种思想!!!

C语言---斐波那契问题的更多相关文章

  1. 斐波那契堆(二)之 C++的实现

    概要 上一章介绍了斐波那契堆的基本概念,并通过C语言实现了斐波那契堆.本章是斐波那契堆的C++实现. 目录1. 斐波那契堆的介绍2. 斐波那契堆的基本操作3. 斐波那契堆的C++实现(完整源码)4.  ...

  2. 斐波那契堆(三)之 Java的实现

    概要 前面分别通过C和C++实现了斐波那契堆,本章给出斐波那契堆的Java版本.还是那句老话,三种实现的原理一样,择其一了解即可. 目录1. 斐波那契堆的介绍2. 斐波那契堆的基本操作3. 斐波那契堆 ...

  3. 斐波那契堆(一)之 图文解析 和 C语言的实现

    概要 本章介绍斐波那契堆.和以往一样,本文会先对斐波那契堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现:实现的语言虽不同,但是原理如出一辙,选择其中之一进行了 ...

  4. go语言之进阶篇通过select实现斐波那契数列

    一.select作用 Go里面提供了一个关键字select,通过select可以监听channel上的数据流动. select的用法与switch语言非常类似,由select开始一个新的选择块,每个选 ...

  5. C 语言实例 - 斐波那契数列

    C 语言实例 - 斐波那契数列 斐波那契数列指的是这样一个数列 , , , , , , , , , , , , ,,,,,,,,,,,........ 这个数列从第3项开始,每一项都等于前两项之和. ...

  6. Go语言学习之斐波那契数列的测试例子和定义常量方法

    ### Go语言学习之斐波那契数列的测试例子和定义常量方法 1.go语言中测试文件必须以test.go结尾,比如:fib_test.go 2.测试文件内的方法必须是Test开头,比如:func Tes ...

  7. Go语言实现:【剑指offer】斐波那契数列

    该题目来源于牛客网<剑指offer>专题. 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0) n<=39 Go语言实现: 递归: ...

  8. 斐波那契数 c 语言实现

    斐波那契数列,又称黄金数列,指的是这样一个数列:1.1.2.3.5.8.13.21.……在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2) ...

  9. C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)

    本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...

随机推荐

  1. SpringBoot使用thymeleaf模板引擎

    (1).添加pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactI ...

  2. JavaScript对象复制(二)

    <script> function copy(a) { ret = {}; for (sth in a) { temp = a[sth]; if (temp instanceof Arra ...

  3. Libevent源码分析—event_add()

    接下来就是将已经初始化的event注册到libevent的事件链表上,通过event_add()来实现,源码位于event.c中. event_add() 这个函数主要完成了下面几件事: 1.将eve ...

  4. jquery引入

    网络地址:http://code.jquery.com/jquery-2.2.0.min.js 在需要的页面中直接使用网络地址,就不需要本地文件 <script type="text/ ...

  5. 注解图Annotation

    该图来源于 竹子-博客(.NET/Java/Linux/架构/管理/敏捷) http://www.cnblogs.com/peida/archive/2013/04/26/3038503.html,感 ...

  6. VirtualBox上的Ubuntu附加功能

    主机:Windows 10家庭中文版,VirtualBox 版本 5.2.22 r126460 (Qt5.6.2),Ubuntu 18.04, 在主机上安装了VirtualBox,然后在Virtual ...

  7. Vue项目启动后首页URL带的#该怎么去掉?

    修改router的mode为history就可以 const router = new VueRouter({mode: 'history', routes: [...]}) 实际修改后需要注意修改a ...

  8. MySQL 5.6.26几种安装包的区别

    一.MySQL Installer 5.6.26 mysql-installer-community-5.6.26.0.msi, 364.2MBMySQL Installer 提供了简单易用.向导式的 ...

  9. C++ code:More Loop Designs

    1  逻辑判断 对于逻辑判断问题,一般都要考虑全部的可能性,然后从这些可能性中按条件逐一排查,直到最后获得某个结论. [百钱买百鸡问题] 问题描述: 雄鸡(cock)7元一只,母鸡(hen)5元一只, ...

  10. openj 4004 01背包问题求方案数

    #include<iostream> #include<cstring> #include<cstdio> using namespace std; #define ...