C语言函数的递归(斐波那契数的查找)

今天学习了函数的调用以及递归,函数可以让我们的代码看起来有条理,主函数没有很多冗余的东西,但是在调用的时候也要注意一些小细节。第二个就是递归了,递归就是函数自己调用自己,在使用递归的时候需要我们对于题目先行理解,处理好逻辑关系,这样在写代码时也可以避免很多不必要的错误。在写练习的时候也会遇到一些小问题,比如栈溢出,未编写跳出条件等问题。

典型问题:栈溢出问题

下面编写的代码是由问题的,由于每递归一次函数都需要在栈内部开辟一个内存单元,因此递归达到一定的次数时,就会出现内存单元不够的问题,这就是栈溢出问题。这也是我们编写代码时需要注意的一个问题点,采用合适的方法达到目的。

void test(int n)
{
    if(n<10000)
    {
        test(n+1);
    }
}
int main()
{
    test(1);
    system("pause");
    return 0;
}

例:寻找斐波那契数

方法一:使用函数递归来实现斐波那契数的查找

使用递归的方法虽然可以解决问题,但是一直在函数内部做多余的重复操作,效率十分低下。

int num(int n)
{
    if(n==1||n==2)
    {
        return 1;
    }
    
    else if(n>2)
    {
        return num(n-1)+num(n-2);
    }
}

int main()
{
    int i=1;
    printf("请输入想查找的第几位斐波那契数:");
    scanf("%d",&i);
    printf("%d\n",num(i));

    system("pause");
    return 0;
}

方法二:使用while循环

使用while循环实现首先需要对于题目本身进行理解,理清逻辑,再进行编写代码,这样的方法可以更加高效的去完成任务,相比于递归方式来说有着很大的优势。

int num(int n)
{
    int a=1,b=1,c=1;
    while(n>2)
    {
        c=a+b;
        a=b;
        b=c;
        n--;
    }
    return c;
}
int main()
{
    int i=1;
    printf("请输入想查找的第几位斐波那契数:");
    scanf("%d",&i);
    printf("%d\n",num(i));

    system("pause");
    return 0;
}

总结:综合今天练习的几道题目来说,函数递归是一种很方便的代码编写方式,但是还是需要我们自己对于题目理解,最终选择出最优方案,并不能将递归当做唯一的方式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值