NOI(2.2基本算法之递归和自调用函数之1755:菲波那契数列)

最近学习了关于递推的知识,又要写博客,所以本人就很“表脸的”出来写一篇关于递推的文章。

首先,让大家先看看这次的题目:斐波拉契数列NOI(2.2基本算法之递归和自调用函数之1755:菲波那契数列)_第1张图片

前面的基础步骤我也就不写了,直接把图发出来吧。

NOI(2.2基本算法之递归和自调用函数之1755:菲波那契数列)_第2张图片

这里提醒大家一句的是,一定要审好题,注意数组的大小不要太小,也不要太大了,想想,我就是因为数组的大小不对,被坑了无数次;

好了,接下来,我们应该怎么做呢?

首先,题中告诉大家的是数列的第一个数与第二个数都是1,所以应该给a[25]定值,就定个a[25]={0,1,1}吧;

接着,就要用到递推中最关键的“黑科技”了,那就是函数;

我自己定义了一个函数

NOI(2.2基本算法之递归和自调用函数之1755:菲波那契数列)_第3张图片

图中的fblq也就是斐波拉契的缩写,后面的(int n)也就是表示关于整数n的意思,

接着,就要定义这个函数了,

当n为1或2时,最后输出的结果也应该就是1;

当n不为1或2时,所得的结果也应该就是前两个数相加所得的结果

代码也就为:

{
    if(n==1||n==2) return 1;
    if(a[n]) return a[n];
    a[n]=fblq(n-1)+fblq(n-2);
    return a[n];
}

最后,在输出时就应该给函数调用返回值了;

代码为:printf("%d\n",fblq(q));

至此,所有的代码也就写完了;

最后,提交上去给大家看看:

NOI(2.2基本算法之递归和自调用函数之1755:菲波那契数列)_第4张图片

你可能感兴趣的:(NOI(2.2基本算法之递归和自调用函数之1755:菲波那契数列))