有人请告诉我,这段代码有什么问题
#include<stdio.h>
bool func(char *,int);
void main()
{
char *a="Interview";
if(func(a,9))
{
printf("True");
}
else
{
printf("False");
}
}
bool func(char *s, int len)
{
if(len < 2)
return true;
else
return s[0] == s[len-1] && func(&s[1], len-2);
}
Run Code Online (Sandbox Code Playgroud)
我相信这个功能总会回来TRUE.这是一个面试问题.但是,当我尝试编译它时,它显示6个错误 ..
Mik*_*ike 12
我要去猜它不知道什么是bool和true是.bool在C中不是原始数据类型,您需要额外的包含:
#include <stdbool.h>
Run Code Online (Sandbox Code Playgroud)
问题的第二部分? Does it always return TRUE?
不是:当你进入这个功能时,你将跳过第一次返回,因为你的长度是9.所以相反,如果true只有:
return s[0] == s[len-1] && func(&s[1], len-2)
Run Code Online (Sandbox Code Playgroud)
是真的.你可以在这里跳过递归逻辑,因为它不是修改你的字符串,只看第一部分:
s[0] // this has to be 'I'
== // we need so what we compare against has to be 'I' as well
s[len-1] // This will be 'w'
Run Code Online (Sandbox Code Playgroud)
所以...那不会回归真实......谁关心ANDing(&&)的递归部分?我怀疑编译器甚至会优化它,因为这里的所有内容都是硬编码的.
您只需包含正确的标题即可。
#include <stdbool.h>
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用_Bool不需要任何包含的类型。bool只是该类型的别名。顺便说一句,别忘了用 C99 编译。