递归法

什么是递归算法?
若一个算法直接的或间接的调用自己本身,则称这个算法是递归算法。递归本质上也是一种循环的算法结构,它把较复杂的计算逐次归结为较简单的情形的计算,直到归结到最简单情形的计算,并最终得到计算结果为止。


递归算法的特性
例如,我们现在要求n!那么这个问题就可以转化成求n(n-1),而我们要求(n-1)!又可以转化成求(n-1)(n-2),有规律的递减,直到1!然后结束。递归算法的执行过程划分为递推和回归两个阶段。在递推阶段,把规模为n的问题的求解推到比原问题的规模较小的问题求解,且必须要有终止递归的条件。在回归阶段,当获得最简单情况的解后,逐级返回,依次得到规模较大问题的解。

示意图.png

(1)求解规模为n的问题可以转化为一个或多个结构相同、规模较小的问题,然后从这些小问题的解能方便地构造出大问题的解。
(2)递归调用的次数必须是有限的。
(3)必须有结束递归的条件(边界条件)来终止递归。


斐波那契数列问题

1.问题描述

著名的数列—斐波那契数列(Fibonacci),可以定义为:

当n = 0时;F(n) = 0。(从实际意义出发,不考虑n<0的情况)

当n = 1时;F(n) = 1。

当n > 1时;F(n) = F(n-1)+F(n-2)。

兔子.png

请求出第n项斐波那契数,以及前n项斐波那契数列的和(在没有兔子死亡的理想情况下)。

2.分析

从上面的规律我们可以得到一个无穷数列(1,1,2,3,5,8,13,21,34,55……),求解第n个斐波那契数,必须先计算F(n-1)和F(n-2),而计算F(n-1)和F(n-2)又必须先计算F(n-3)和F(n-4),以此类推,直至F(1)和F(2),而F(1)和F(2)是可以立即求得,因此该问题可以利用递归方法求解。

3.程序运行

#include<iostream>
using namespace std;

int fib(int n){
    int f=0;
    if(n==1||n==2) return 1;    //第一个月兔子没有成熟,不出生新兔子,第二个月成熟了,只有一对成熟兔子,
                                //我们也可以这么写:if(n<=1)return n;
    f=fib(n-1)+fib(n-2);        //n>=3时,当月兔子数等于前一个月兔子数目加上上月兔子数
    return f;
}

int main(){
    int n,i,m=0;
    cin>>n;
    m=fib(n);
    cout<<"第"<<n<<"项是"<<m<<endl;
    m=0;
    for(i=1;i<=n;i++) m=fib(i)+m;
    cout<<"前"<<n<<"项和是"<<m<<endl;
    return 0;
}

至此我们已经能求出第n项斐波那契数,以及前n项斐波那契数列的和了。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容

  • 设一个未知函数f,用其自身构成的已知函数g来定义:f(n)=g(n ,f(n-1))n>0f(0)=an=0为了定...
    阳光的技术小栈阅读 2,278评论 0 0
  • 递归法: 通过自身调用自身来达到问题解决的算法。一般,我们用归纳法是证明递归算法正确性和进行算法分析 原问题无法解...
    _属于我阅读 2,187评论 0 2
  • 递归是设计和描述算法的一种有力的工具,由于它在复杂算法的描述中被经常采用,为此在进一步介绍其他算法设计方法之前先讨...
    march_1991阅读 4,089评论 0 2
  • 求解时间复杂度的方法有很多,之前我们学过使用递推公式计算时间复杂度,今天我们就来学习用递归树来求解递归算法的时间复...
    天命_风流阅读 4,167评论 0 2
  • 导论  小编之前在分享有关的算法时,把递归这一重要的算法设计思想给遗漏了。递归的学习绝对是一个持久战,没有人可以一...
    ITsCLG阅读 8,531评论 1 5