C语言---斐波那契问题
最近学习了一个叫递归的概念,里面最著名的一个例子就是斐波那契问题,觉得很有意思,就来实现一下:
什么是斐波那契数列
斐波那契数列,又称黄金分割数列,值得这样一个数列:0、1、1、3、5、8、13、21、34、……在数学上,斐波那契数列以如下形式递归方法定义:
  这是一个线性递推数列。
递归实现方式:
Demo:
#include <stdio.h>
//recursive fibonacci
int rec_fibo(int n)
{
if(n == 1 || n == 2)
return 1;
if(n > 2)
return (rec_fibo(n - 2) + rec_fibo(n - 1));
}
int main(void)
{
int n = 0;
//提醒user输入
printf("please input you want to test number:\n");
scanf("%d", &n);
int fi_num = 0;
//调用rec_fibo()函数
fi_num = rec_fibo(n);
//向屏幕输出
printf("F[%d] = %d\n", n, fi_num);
return 0;
}
非递归实现方式:
Demo:
//fibonacci non-recursive implementation
int non_rec_fibo(int n)
{
//定义一个临时储存数组来存储
int temp[2];
//分别给0,1下标的数组赋初值
temp[0] = 1;
temp[1] = 1;
int i = 0;
if(n == 1 || n == 2)
return 1;
else
{
for(i = 2; i < n; i++)
{
//进行数组内部的数据转换
int tp = temp[0] + temp[1];
temp[1] = temp[0];
temp[0] = tp;
}
return temp[0];
}
}
int main(void)
{
int n = 0;
printf("please input you want to test number:\n");
scanf("%d", &n);
int fi_num = 0;
fi_num = non_rec_fibo(n);
printf("F[%d] = %d\n", n, fi_num);
return 0;
}
ok这里已经完整的说明了斐波那契数列的两种思想!!!
C语言---斐波那契问题的更多相关文章
- 斐波那契堆(二)之 C++的实现
概要 上一章介绍了斐波那契堆的基本概念,并通过C语言实现了斐波那契堆.本章是斐波那契堆的C++实现. 目录1. 斐波那契堆的介绍2. 斐波那契堆的基本操作3. 斐波那契堆的C++实现(完整源码)4. ...
- 斐波那契堆(三)之 Java的实现
概要 前面分别通过C和C++实现了斐波那契堆,本章给出斐波那契堆的Java版本.还是那句老话,三种实现的原理一样,择其一了解即可. 目录1. 斐波那契堆的介绍2. 斐波那契堆的基本操作3. 斐波那契堆 ...
- 斐波那契堆(一)之 图文解析 和 C语言的实现
概要 本章介绍斐波那契堆.和以往一样,本文会先对斐波那契堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现:实现的语言虽不同,但是原理如出一辙,选择其中之一进行了 ...
- go语言之进阶篇通过select实现斐波那契数列
一.select作用 Go里面提供了一个关键字select,通过select可以监听channel上的数据流动. select的用法与switch语言非常类似,由select开始一个新的选择块,每个选 ...
- C 语言实例 - 斐波那契数列
C 语言实例 - 斐波那契数列 斐波那契数列指的是这样一个数列 , , , , , , , , , , , , ,,,,,,,,,,,........ 这个数列从第3项开始,每一项都等于前两项之和. ...
- Go语言学习之斐波那契数列的测试例子和定义常量方法
### Go语言学习之斐波那契数列的测试例子和定义常量方法 1.go语言中测试文件必须以test.go结尾,比如:fib_test.go 2.测试文件内的方法必须是Test开头,比如:func Tes ...
- Go语言实现:【剑指offer】斐波那契数列
该题目来源于牛客网<剑指offer>专题. 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0) n<=39 Go语言实现: 递归: ...
- 斐波那契数 c 语言实现
斐波那契数列,又称黄金数列,指的是这样一个数列:1.1.2.3.5.8.13.21.……在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2) ...
- C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)
本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...
随机推荐
- JS window对象的top、parent、opener含义介绍
1.top该变更永远指分割窗口最高层次的浏览器窗口.如果计划从分割窗口的最高层次开始执行命令,就可以用top变量. 2.openeropener用于在window.open的页面引用执行该window ...
- ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Atomicity
1.前言 Atomicity是内存访问的一个属性,描述为原子性访问,包括single-copy atomicity和multi-copy atomicity 2.基本概念 observer 可以发起对 ...
- ARMV8 datasheet学习笔记3:AArch64应用级体系结构
1.前言 本文主要从应用的角度介绍ARMV8的编程模型和存储模型 2. AArch64应用级编程模型 从应用的角度看到的ARM处理器元素: 可见的元素(寄存器/指令) 说明 可见的寄存器 R0-R30 ...
- openwrt git 代码下载地址
openwrt 各个版本代码下载 trunk:git clone git://github.com/openwrt/openwrt.git 15.05 (Chaos Calmer)git clone ...
- dubbo作为消费者注册过程分析--????
请支持原创: http://www.cnblogs.com/donlianli/p/3847676.html 作者当前分析的版本为2.5.x.作者在分析的时候,都是带着疑问去查看代码,debug进 ...
- PhpStrom添加调试功能
要给PhpStrom添加调试功能,需要安装Xdebug,网址:https://xdebug.org/ 1.如何下载对应thinkphp版本号的Xdebug呢 创建一个php文件,在里面输入phpinf ...
- winform(记事本--查找)
- PHP中的一些常用函数
<?php //===============================时间日期=============================== //y返回年最后两位,Y年四位数,m月份数字 ...
- python易错题之lambda 以及 for循环中内嵌函数
li = [] for x in range(10): print(x) //在函数没有执行前(li[0]()),for 循环中x已经执行完,x会一直为 9 def fun(): print(x) / ...
- String中的toCharArray:将此字符串转换为新的字符数组,并统计次数
package stringyiwen; public class StringTestToCharArray { public static void main(String[] args) { S ...