如何理解递归思想

目录

一、什么是递归

二、如何实现递归函数

三、什么时候应该使用递归


一、什么是递归

  递归:程序调用自身的编程思想叫做递归,合理运行递归可以帮助我们将问题把大化小.

  递归的实现:c语言中递归是要借助栈来实现递归,通过将每次递归的结果压入栈中,再结合栈先进后出的特性来实现递归过程。

二、如何实现递归函数

1.要想实现递归函数,首先就要理解这个函数要完成什么功能,例如在用递归函数将字符串逆序输出这个问题中,这个递归函数实现的功能就是将字符串逆序打印出来.

2.确定递归函数实现的功能后,就要开始实现函数内部细节,此时也是实现递归函数的重点,

首先要确定递归的结束条件,递归的过程就是调用自身函数,所以我们要确定这个结束条件,否则这个函数就会一直调用,导致栈溢出,所以在确定递归的结束条件时要严谨,多考虑可能发生的情况,在用递归函数将字符串逆序输出这个问题中,这个的结束条件就是当这个的字符串的长度小于等于1时,直接进行打印,此时的结果就是逆序的结果

void reverse(int n){
    char next;
    //结束条件
    if(n<=1){
        next=getchar();
        printf("逆序结果为:\n");
        putchar(next);
    }
    
}

在进行结束条件的判断时,有时我们会写n==1这种情况,这种往往是存在错误的,当n=0;此时函数就会继续调用,存在漏洞,会导致栈溢出,所以我们要以n<=1为条件。

其次就是我们要不断减小参数的大小,让每次的调用都不断接近这个结束条件,当某一次的调用为这个结束条件后,我们的调用过程就完成了。

else{
        next=getchar();
        reverse(n-1);//递归调用  上一级的结果存储在栈中,递归的实现离不开栈
        putchar(next);
    }

递归函数将字符串逆序输出的完成代码如下:

#include <stdio.h>

void reverse(int n){
    char next;
    //结束条件
    if(n<=1){
        next=getchar();
        printf("逆序结果为:\n");
        putchar(next);
    }
    else{
        next=getchar();
        reverse(n-1);//递归调用  上一级的结果存储在栈中,递归的实现离不开栈
        putchar(next);
    }
}
int main(){
    char next;
    int n=5;
    printf("请输入%d个字符:\n",n);
    reverse(n);
    return 0;
}

三、什么时候应该使用递归

解决问题时,可以把一个问题转化为一个新的问题,而这个新的问题的解决方法仍与原问题的解法相同,只是所处理的对象有所不同,这些被处理的对象之间是有规律的递增或递减;这时我们就可以使用递归,但要注意这个问题有没有明确的结束条件,不要陷入循环,

常见的使用的递归解决的问题,如斐波那契数列,小青蛙跳台阶,字符串逆序等。

                          

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值