美文网首页
使用递归函数求解字符串的逆置问题

使用递归函数求解字符串的逆置问题

作者: IT之旅 | 来源:发表于2020-07-07 09:11 被阅读0次

一、递归函数概述

        在使用面向过程的编程语言进行程序编写的过程中,一般是按照结构化的编程思想、模块化的程序设计方法来进行程序的编写和代码的组织的。我们熟悉的C语言就是这样一类程序设计语言,它通常以函数为单位进行程序的模块化组织,C源程序就是由一个主函数和若干非主函数构成的。计算机在执行C程序时,是按照顺序从主函数main()开始执行,如果遇到调用其他函数的情况,则主函数暂停执行,转而执行相应的函数,该函数执行完毕之后,返回主函数,主函数继续执行,这称为函数的调用。不仅主函数可以调用其他函数,各个函数之间也是可以相互调用的,如果一个函数自己调用自己,我们称之为函数的递归调用。在某些特殊问题的求解中,使用递归函数有时候会有非常高的效率。(更好的阅读体验,请访问程序员在旅途)
        递归(Recursion)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法,其核心思想是分治策略。 递归算法适合解决以下三类问题:

  1. 数据的定义是按递归定义的。如Fibonacci函数。
  2. 问题解法按递归算法实现。如Hanoi问题。
  3. 数据的结构形式是按递归定义的。如二叉树、广义表等。

二、字符串逆置例题求解

2.1 题目描述

        编写一个函数把字符串逆置(如字符串"abcde"变成"edcba")。

2.2 分析求解

        将字符串逆置,可以将第一个字符串和最后一个字符串交换,再将剩下的字符串逆置,剩下的字符串长度就在原来的长度上减2,规模以此缩小,剩下的字符串逆置方法和第一次一样,如果字符串长度≤1,则递归条件结束。程序如下:

#include<stdio.h>
//start,end为字符串开始和结束的下标
void convert_str(char *str, int start, int end){
    char ch;
    if((end - start) < 1){  // <1说明字符串 只有一个字符,无无需交换,递归结束条件
        return ;  
    }else{
    
        ch = str[start];
        str[start] = str[end];
        str[end] = ch;
        convert_str(str,start+1,end-1); //递归调用该函数,将剩下的字符串进行交换
    }
}
int main(){

        char x[] = "abcdefgh";
        convert_str(x,0,7);

        printf("字符串逆置后为: %s \n", x);

        return 0;
}

三、总结

        1)递归的精髓在于如何把规模大的、较难解决的问题变成规模较小的、易解决的同一问题,规模较小的问题又变成规模更小的问题,并且小到一定程度可以直接得出它的解,从而得到原来问题的解。此外,还得要注意递归的终止条件,也就是递归的出口,出口条件设置错误的话,程序会无法终止,从而导致程序的崩溃。
        2)递归的实现得益于栈这种数据结构,函数的每一次调用,都会使用栈来保存函数的参数、局部变量、返回地址等数据,因此,在使用递归的时候,一定要考虑递归的深度问题,如果过深,会容易造成栈溢出,导致问题求解失败。

相关文章

  • 使用递归函数求解字符串的逆置问题

    一、递归函数概述 在使用面向过程的编程语言进行程序编写的过程中,一般是按照结构化的编程思想、模块化的程序设计方法来...

  • c++算法常用函数

    利用sort函数排序: sort(arr,arr+index); 字符串逆置函数: _strrev()...

  • 第二章 递归和回溯

    递归 递归的含义:任何调用自身的函数称为递归。用递归求解问题要点在于递归函数调用自身取解决一个规模比原始问题小一些...

  • 机试常用算法和题型-容器函数使用专题

    string.h库函数memset()置零 reverse()逆置函数algorithm头文件 strrev逆置字...

  • 单链表的逆置

    方法一:迭代逆置 在上一篇文章的基础上添加Reverse()方法。 方法二:递归逆置

  • 数据结构-递归

    递归定义:递归(Recursion)是指在函数的定义中使用函数自身的方法 递归使用的3个条件: 1.问题可以拆解成...

  • 递归

    递归就是将原来的问题转化为更小的同一问题。递归函数的必要条件:1、求解最基本的问题2、把原问题转化为更小的问题。例...

  • 关于数组的一些操作【python】

    递归的应用:求输入字符串的全排列 求输入字符串的全排列递归完成,也可以直接使用库函数 结果展示: ————————...

  • 逆序输出字符串

    使用reverse()函数 思路:首先将字符串转换为字符数组,然后使用原生的reverse()函数进行逆序,得到逆...

  • 算法面试:链表转置

    //单链表定义 普通的循环的方法。 //单链表逆置实现 递归调用方法

网友评论

      本文标题:使用递归函数求解字符串的逆置问题

      本文链接:https://www.haomeiwen.com/subject/jknoqktx.html