怎么实现数组的递归子函数


#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;
}

img

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;
}

(1)search(storage[d+1])改成 search(&storage[d+1])。
&storage[d+1]即为取storage[d+1]的地址。
(2)for(int j=i;j>=0;j--){ 改成 for(int j=i-1 ;j>=0;j--){
因为上一次的for循环 i 最后多++了一次,所以,这里for循环逆序遍历的时候,j 应该从 i-1开始。
完整代码如下:

#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-1; j >= 0; j--) {
        search(storage[j]);
    }
    if (search) {
        printf("YES\n");
    }
    else {
        printf("NO\n");
    }
    return 0;
}

这段代码是想实现什么功能?

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632