用递归写斐波那契数列的感悟及分析

       递归即程序调用自身的编程技巧。在程序设计语言中广泛应用。一般用于解决三类问题:1.数据的定义是按递归定义的。(比如斐波那契数列)2.问题解法按递归算法实现。(汉诺塔)3.数据的结构形式是按递归定义的。

        我第一次敲递归便是斐波那契数列。向学长讨教过后,写出代码如下:

#include<stdio.h>

int Fibon1(int n) {        //定义一个斐波那契数列函数

if (n == 1 || n == 2) {

        return 1; }                //出口

else {

        return Fibon1(n - 1) + Fibon1(n - 2); }        //自己调用自己

}

int main() {

int n ;

int ret = 0;

scanf("%d", &n);

ret = Fibon1(n);

printf("ret=%d", ret);

return 0;

}

        斐波那契数列又称黄金分割数列。指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(≥ 2,∈ N*)。

        斐波那契数列很符合递归一般应用的第一类问题,即数据的定义就是按递归定义。写完基本的主函数后,定义一个斐波那契数列函数,规定出口,然后写递归关系并进行调用。用递归写斐波那契数列极大地简化了程序,为了对照,我还用for循环写了斐波那契数列。由于主函数部分都相同,于是这里只给出了子函数部分。

int Fibonacci(int n){

int i,num=1, sum=1, tmp=0;
if (n <= 2)
        return 1;
else
        for (i = 3; i <= n ; i++) {
        tmp = num + sum;
        num = sum;
        sum = tmp;
        }
return sum;
}

        用for循环写出的斐波那契数列程序编码相对较多,并且相对递归较复杂。而递归将问题细化解决,使用更为简便。要写递归函数,最主要的是找准递归关系和出口,其中,如何准确运用递归关系自己调用自己是学会写递归函数的精髓。

        依旧是以斐波那契数列为例,出口为当n<=2时返回1,依据斐波那契数列的函数式F(n)=F(n - 1)+F(n - 2)(≥ 2,∈ N*),可写 Fibon1(n - 1) + Fibon1(n - 2)作为返回值,实现递归的自己调用自己。

        我初学递归时,很难把握递归关系并用编程语言的形式写出来,经过自己课后观看线上视频和向学长学姐们的请教,对递归的了解加深了许多,学C语言的过程中有苦有乐,从一窍不通的小白到现在的基本掌握,有敲代码到深夜的难以入眠,也有为一个代码困扰几天而不得解的烦恼,越到后来,学的内容越来越难,敲一个代码所需的时间也就越长,常常两三个小时才能搞懂一个代码。但是学习编程所需要的正是时间和经历所堆积的经验和熟练。练的越多就会越熟练,思维也会越开阔。斐波那契数列是我接触的第一个递归编程,也是印象最深的一个,因为它为我打开了递归的新大门,让我接触到了递归。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值