A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Tony鱼先森 中级黑马   /  2015-4-19 10:31  /  869 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Tony鱼先森 于 2015-4-19 12:48 编辑
  1. void common(char *s1, char *s2, int i, int j, int *m) {
  2.     if(s2[i+1]==s1[j+1]&&s2[i+1]!='\0'&&s1[j+1]!='\0') {
  3.         (*m)++;
  4.         common(s1,s2,i+1,j+1,m);                     //这个递归怎么理解,或者过程是什么样的。
  5.     }
  6. }
复制代码

5 个回复

倒序浏览
这里有递归吗 我没有看见函数的自我调用啊

点评

谢谢提醒,已重新编辑帖子  发表于 2015-4-19 12:28
回复 使用道具 举报
那在下就发表下愚见
根据在下对代码的理解

有2个字符串s1 s2 两个指针i,j(就是作用是指针 不是C语言的指针概念),最后用C语言的指针传一个变量m进去 作为计数器

改函数的作用的 指定s1 s2两个字符串的指针初始位置 求该位置后相同的子字符串的字符的数量 并讲改数量放到m中

过程 假设i=2,j=3 最开始调用函数 得到了这个位置的字符是否相等 如果不相等 或者 有字符为空 说明没有相同的子字符串 m不加1 函数退出;

但是 如果这个位置的字符相同 那么肯定要判断下个位置的字符是否相同 但是注意倒没 我们判断下一个字符 还需要写代码吗? 不需要 直接调用本函数即可 只是把两个字符串的指针位置加1 作为新的参数调用函数即可

递归的概念可以理解成数学归纳法 当递归倒了最底层的时候 就类似于 证明k = 0 ,k=k+1,然后可以推导出k=1,2,3.....

如果解决了你的问题 麻烦设置已经解决问题 我很需要技术分 谢谢

点评

麻烦设置成已解决 我求分 我谢谢你  发表于 2015-4-19 12:49
理解透彻……谢谢。  发表于 2015-4-19 12:47
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马