黑马程序员技术交流社区
标题:
这个递归如何理解
[打印本页]
作者:
Tony鱼先森
时间:
2015-4-19 10:31
标题:
这个递归如何理解
本帖最后由 Tony鱼先森 于 2015-4-19 12:48 编辑
void common(char *s1, char *s2, int i, int j, int *m) {
if(s2[i+1]==s1[j+1]&&s2[i+1]!='\0'&&s1[j+1]!='\0') {
(*m)++;
common(s1,s2,i+1,j+1,m); //这个递归怎么理解,或者过程是什么样的。
}
}
复制代码
作者:
麻木
时间:
2015-4-19 12:20
这里有递归吗 我没有看见函数的自我调用啊
作者:
麻木
时间:
2015-4-19 12:44
那在下就发表下愚见
根据在下对代码的理解
有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.....
如果解决了你的问题 麻烦设置已经解决问题 我很需要技术分 谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2