C++递归实现回文字符串判断代码失效问题求助
递归回文判断代码错误排查
你提交的代码存在3处会直接导致运行逻辑错误的问题:
- 递归终止条件位置错误:判断指针相遇/相邻、返回匹配成功的逻辑写在了
return 0分支之后,属于永远无法执行到的死代码,递归没有正确的出口,永远不会返回匹配成功的结果。 - 递归调用语法错误:
return(s, f +1, l-1);缺失递归调用的函数名,实际是逗号表达式运算,只会返回表达式最后一个参数的数值,完全没有实现递归调用子问题的逻辑,正确写法应为return p(s, f+1, l-1);。 - 边界判断逻辑错误:终止条件中
f-l == 1的计算逻辑写反,递归过程中左指针f递增、右指针l递减,两指针相邻时应为l - f == 1,原判断条件永远无法触发。
修正后的可运行代码如下:
#include <bits/stdc++.h> using namespace std; int p(string &s, int f, int l){ // 递归终止边界:指针重合或相邻,说明所有前置字符均匹配,判定为回文 if(f >= l || l - f == 1){ return 1; } // 首尾字符不匹配,直接判定非回文 if(s[f] != s[l]){ return 0; } // 首尾字符匹配,收缩指针递归判断内层子串 return p(s, f + 1, l - 1); } int main(){ string s; cin >> s; int f = 0; int l = s.length() - 1; cout << (p(s, f, l) ? "YA" : "BUKAN") << endl; return 0; }
修正逻辑说明:递归函数必须优先判定终止边界,避免数组越界访问;匹配逻辑按从外到内的顺序逐对比较字符,任意一对不匹配就提前返回失败,全部匹配完成后返回成功。
内容的提问来源于stack exchange,提问作者Orla Black
相关产品推荐
相关产品推荐

