【发布时间】:2015-02-16 00:11:34
【问题描述】:
编写一个递归布尔函数,如果字符串是回文则返回 1,否则返回 0。
bool ispalindrome(char str[])
注意:函数必须是递归的(不是递归函数的包装器),它必须使用给定的(以上)签名,并且不允许全局或静态变量,此外,我们可以' t“销毁”给定的字符串。
我的尝试:
bool ispalindrome(char str[]){
bool res;
if (*str == 0 || *(str + 1) == 0)
return 1;
else{
res = ispalindrome(str + 1);
现在我被困住了,我想制作一个使用动态数组的辅助函数,该数组将删除原始字符串中的第一个和最后一个元素并在递归调用中使用它,但我认为这不是预期的解决方案.
编辑:我已经取得了一些进展,但它不起作用:
bool ispalindrome(char str[]){
bool res;
int l = strlen(str);
char t;
if (*str == 0 || *(str + 1) == 0)
return 1;
else{
t = str[l-1];
str[l-1] = 0;
res = ispalindrome(str + 1);
if (res == 0)
return 0;
if (str[0] == str[l - 2])
res =1;
else
res=0;
str[l] = t;
return res;
}
}
【问题讨论】:
-
函数的其余部分在哪里?
-
我认为在这些指令下这是不可能的,除非你践踏传入的字符串或为每个调用分配一个新字符串。
-
@iharob 正如我所写,我不知道如何继续。
-
计算机科学概论递归作业问题之母!
-
请注意,not 传递字符串的长度是非常低效的。使用这些信息可以更有效地编写函数。