递推算法(顺推)- 斐波那契数列用C++实现
来源:互联网 发布:手机淘宝怎么换皮肤 编辑:程序博客网 时间:2024/05/11 01:58
递推算法:递推算法是一种简单的算法,即通过已知条件,利用特定关系得出中间推论,直至得到结果的算法。递推算法分为顺推和逆推两种。
顺推法:顾名思义,顺推法是指“从已知条件出发,逐步推算出要解决的问题”的方法。
这次就先介绍顺推法中的一个典型的例子,斐波那契数列。
题目:一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?
分析:我们不妨拿新出生的一对小兔子A分析一下:
一个月后小兔子A没有繁殖能力,所以还是一对(A);
两个月后,A生下一对小兔B,对数共有两对(A,B);
三个月以后,A又生下一对C,因为小兔子(B)还没有繁殖能力,所以一共是三对(A,B,C);
------
依次类推可以列出下表:
(幼仔对数指1个月大的兔子,成兔对数指2个月大的兔子)
幼仔对数 = 前月成兔对数
成兔对数 = 前月成兔对数 + 前月幼仔对数
总体对数 = 本月成兔对数 + 本月幼仔对数
可以看出幼仔对数、成兔对数、总体对数都构成了一个数列。即:
幼仔对数:前面相邻两项相加,得到后一项。
成兔对数:前面相邻两项相加,得到后一项。
总体对数:前面相邻两项相加,得到后一项。
这三个数列具有相同的通项公式:a(n+2) = an + a(n+1)。
题目所求为一年后可以繁殖多少对兔子,即求总体对数。下面给出具体代码:
#include "stdafx.h"#include <iostream>using namespace std;#define NUM 13 //这里NUM为宏定义值13,代表rabbitCount数组长度为13int _tmain(int argc, _TCHAR* argv[]){long rabbitCount[NUM] = {}; //下标为0-12rabbitCount[0]为初始状态兔子总数量rabbitCount[0] = 1; //rabbitCount[0]为初始状态兔子总数量,值为1rabbitCount[1] = 1; //rabbitCount[1]为一个月后兔子总数量,值为1for(int i = 2; i < NUM; i++){ //从第二月开始,到12月结束rabbitCount[i] = rabbitCount[i - 1] + rabbitCount[i - 2];}for (int i = 0; i < NUM; i++){ cout << "第"<< i <<"个月后兔子总数为:"<< rabbitCount[i] <<endl;}system("pause");return 0;}
扩展:一般遇到斐波那契数列的题目,并不是让我们计算原始的兔子题,而是在其基础上扩展的题目
斐波那契数列扩展题:斐波那契数列指的是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
这个数列从第三项开始,每一项都等于前两项之和。
试着任意输入一个n值,输出其对于的斐波那契数列的值。
分析:与前面介绍的方法一致,这里可以用函数实现。
具体代码如下:
#include "stdafx.h"#include <iostream>using namespace std;long Fibonacci(int n){if (n == 0 || n == 1)return 1;elsereturn Fibonacci(n - 1) + Fibonacci(n - 2);}int _tmain(int argc, _TCHAR* argv[]){int n; //接受输入的值while (1){cout << "请输入n的值:";cin >> n;if (n < 0){cout << "n的值不能小于0,请重新输入" << endl;}else{cout << "F(" << n << ")= " << Fibonacci(n) << endl;}}system("pause");return 0;}
新手初学,有不足之处欢迎大神指点!
0 0
- 递推算法(顺推)- 斐波那契数列用C++实现
- “斐波那契数列”问题的递推算法
- “斐波那契数列”问题的递推算法
- “斐波那契数列”问题的递推算法
- “斐波那契数列”问题的递推算法
- “斐波那契数列”问题的递推算法
- “斐波那契数列”问题的递推算法
- “斐波那契数列”问题的递推算法
- “斐波那契数列”问题的递推算法
- “斐波那契数列”问题的递推算法
- “斐波那契数列”问题的递推算法
- “斐波那契数列”问题的递推算法
- “斐波那契数列”问题的递推算法
- “斐波那契数列”问题的递推算法
- “斐波那契数列”问题的递推算法
- 斐波那契数列递推
- 递归与递推实现斐波那契数列算法
- 走台阶问题运用递推和斐波那契数列C/C++源码实现
- lcd调色板工作原理详解
- bzoj2463【博弈】
- Python高级编程(四)多线程
- java内部类读书笔记-链接到外部类
- 四大组件 — Activity显示样式
- 递推算法(顺推)- 斐波那契数列用C++实现
- 通过主动学习的方法进行自动语料标注
- 使用Libreswan配置ipsecvpn
- Cut The Cake
- HTML中的置换元素与非置换元素
- 四大组件 — BroadCastReceiver广播接收者
- 好老师
- 改变光标位置
- 方格选数