gpt4 book ai didi

c - 带指针的递归 -C

转载 作者:太空宇宙 更新时间:2023-11-04 04:44:18 25 4
gpt4 key购买 nike

我写了一个方法,应该使用递归来生长“雪花”,它本质上是一棵树。出于某种原因,在调试时,它只会向树中添加一行,并且不会比这更进一步。我认为它与指针有关,但似乎无法弄清楚它有什么问题。非常感谢您的帮助。

int growth(Snowflake * root, Snowflake * parent, Ray * ray){
printf("*\n");
printf("%f\n", root->ray->starting_point);
printf("%f\n", ray->angle);
if (root->middle != NULL){
printf("Found middle! \n");
growth(root->middle, root, ray);
}
else if (root->right != NULL){
printf("Found off center!\n");
growth(root->right, root, ray);
printf("Found off middle!\n");
growth(root->left, root, ray);
}
else{
if (parent == NULL){
printf("MY PARENTS ARE DEAD!\n");
parent = root;
//root = &parent;
}
printf("Starting Again!\n");
Snowflake * add = malloc(sizeof(Snowflake));
add->parent = parent;
add->middle = NULL;
add->right = NULL;
add->left = NULL;
add->ray = ray;
add->ray->starting_point = add->parent->ray->end_point;
add->ray->end_point = add->ray->starting_point + 1;
printf("%f\n",add->ray->starting_point);
printf("%f\n",add->ray->end_point);
if (add->ray->angle == 0){
add->parent->middle = add;
}
else{
add->parent->right = add;
add->parent->left = add;
}
return 1;
}
}

最佳答案

我发现您的代码存在以下问题:

  1. 我没有看到任何检查来确保 root != NULL
  2. 不知道你是不是在用函数的返回值。对该函数进行了 3 次递归调用,但均未返回。我认为,

    growth(root->middle, root, ray);

    应该替换为

    return growth(root->middle, root, ray);
  3. 在这个 block 中,

    else if (root->right != NULL){
    printf("Found off center!\n");
    growth(root->right, root, ray);
    printf("Found off middle!\n");
    growth(root->left, root, ray);
    }

    您没有检查 root->left 是否为 NULL。也许你打算使用:

    else if (root->right != NULL){
    printf("Found off center!\n");
    growth(root->right, root, ray);
    }
    else if (root->left != NULL){
    printf("Found off middle!\n");
    growth(root->left, root, ray);
    }

    如果您打算使用第二个代码块,我会添加几个 return 语句并将其更改为:

    else if (root->right != NULL){
    printf("Found off center!\n");
    return growth(root->right, root, ray);
    }
    else if (root->left != NULL){
    printf("Found off middle!\n");
    return growth(root->left, root, ray);
    }
  4. 这段代码

      if (parent == NULL){
    printf("MY PARENTS ARE DEAD!\n");
    parent = root;
    //root = &parent;
    }

    如果 root == NULL 就会有问题。我不知道您如何确定这不会发生。

希望这对您有所帮助。

关于c - 带指针的递归 -C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22759938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com