如何将统计字符出现次数是否均为偶数的C语言方法改写成递归形式?
迭代改递归实现方案
核心逻辑说明
原迭代逻辑的核心是两层遍历:外层按步长2遍历字符串索引i,统计当前字符在后续位置的出现次数,标记chars数组状态,最后校验chars数组是否全为非0值。递归实现可以把外层的i循环转化为递归调用层级,不需要修改原有的函数调用逻辑。
递归实现代码
int recursionCheckEven(int i, int j, char str[], int chars[20]) { int len = strlen(str); // 终止条件:i已经遍历完所有位置,开始校验chars数组 if (i >= len) { for (int k = 0; k < 20; k++) { if (chars[k] == 0) { return 0; } } return 1; } // 当前i位置已经被标记处理过,直接跳到下一个i if (chars[i] != 1) { return recursionCheckEven(i + 2, 0, str, chars); } // 统计当前字符的出现次数 int count = 0; for (j = i; j < len; j += 2) { if (str[i] == str[j] && chars[j] == 1) { count++; chars[i] = 2; chars[j] = 2; } } // 出现次数为奇数,标记chars[i]为0 if (count % 2 != 0) { chars[i] = 0; } // 递归处理下一个i return recursionCheckEven(i + 2, 0, str, chars); }
调用说明
原有调用逻辑不需要做任何修改,和之前的调用方式完全兼容,传入初始i=0、j=0、目标字符串和初始化全1的chars数组即可。
内容的提问来源于stack exchange,提问作者BiSaXa
相关产品推荐
相关产品推荐

