#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int search(char *storage){
int len;
len=strlen(storage);
for(int d=0;d<len;d++){
if(storage[d]!='P'&&storage[d]!='T'&&storage[d]!='A'){
search(storage[d+1]);
}else{
return 0;
}
}
return 1;
}
int main(){
char storage[100][100];
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%s",storage[i]);
}
for(int j=i;j>=0;j--){
search(storage[j]);
}
if(search){
printf("YES\n");
}else{
printf("NO\n");
}
return 0;
}

怎么实现数组的递归子函数
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- CSDN专家-link 2022-03-29 07:10关注
for(int j=i;j>=0;j--){
这个有问题啊,j应该从i-1开始
你这个递归也有问题,main里调用传入storage[j]没问题,这时候storage是二维数组,但函数里search(storage[d+1]);就不行了,因为这里的storage是函数参数,这个参数只是char *,这样storage[d+1]就是第一个字符,正如错误提示所示,你将char传递给char * ,是错误的。改成search(&storage[d+1])可以搜索从storage下一个字符开始的内容
另外就是最后的if(search)了,这个search不是变量,是函数指针,那肯定不是空啊,你到底想判断什么呢?是否搜索到什么东西?那你应该在上面的search函数调用时,定义一个变量接收函数返回值,如果为1,则表示搜索成功,如果找到就可以结束,那么应该再加个break#include<stdio.h> #include<string.h> #include<stdlib.h> int search(char *storage){ int len; len=strlen(storage); for(int d=0;d<len;d++){ if(storage[d]!='P'&&storage[d]!='T'&&storage[d]!='A'){ search(&storage[d+1]); }else{ return 0; } } return 1; } int main(){ char storage[100][100]; int n,i,find = 0; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%s",storage[i]); } for(int j=i-1;j>=0;j--){ find = search(storage[j]); if(find) break; } if(find){ printf("YES\n"); }else{ printf("NO\n"); } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录ArLo182317 2022-03-30 11:10抱歉我想问一下,我定义的search函数是一个int类型的函数,他有返回值,难道if(search)不会直接判断search函数的返回值吗
赞回复展开全部5条评论