Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的指针和递归函数_C_Pointers_Recursion - Fatal编程技术网

C语言中的指针和递归函数

C语言中的指针和递归函数,c,pointers,recursion,C,Pointers,Recursion,我已经创建了一个带有数字的列表。例如: -3 4 -2 -1 4 5 两个连续节点的乘积为-14-82-421。我想检查两个节点的乘积是否总是大于以下节点的乘积。我使用了一个递归函数,在本例中,由于2>-4,条约不成功 我还想打印一条消息,显示导致问题的第一个节点。在本例中为-1,它是第4个节点。如何返回显示错误节点的指针?见问号:) 我想检查两个节点的乘积是否总是大于以下节点的乘积 我认为您的代码是错误的,即您有>=但应该是next->next==0){ printf(“成功”); 返回0;

我已经创建了一个带有数字的列表。例如:

-3 4 -2 -1 4 5
两个连续节点的乘积为
-14-82-421
。我想检查两个节点的乘积是否总是大于以下节点的乘积。我使用了一个递归函数,在本例中,由于
2>-4
,条约不成功

我还想打印一条消息,显示导致问题的第一个节点。在本例中为-1,它是第4个节点。如何返回显示错误节点的指针?见问号:)

我想检查两个节点的乘积是否总是大于以下节点的乘积

我认为您的代码是错误的,即您有>=但应该是next->next==0){ printf(“成功”); 返回0; } 如果((节点->内容*节点->下一步->内容)下一步->内容*节点->下一步->下一步->内容)){ printf(“由于编号:%d和%d而失败”,节点->下一步->内容,节点->下一步->下一步->内容); 返回节点; } 返回(findNode(节点->下一步)); } int main(){ 结构节点node1={5,0}; 结构节点node2={4,&node1}; 结构节点node3={-1,&node2}; 结构节点node4={-2,&node3}; 结构节点node5={4,&node4}; 结构节点node6={-3,&node5}; 结构节点*res=findNode(&node6); 如果(res!=0){ //res是指向错误节点的指针 } 返回0; }
int main(){if(ptr!=NULL){printf(“\n错误是由%dth节点引起的。”,???);}else printf(“\n%d”,ptr);使用递归函数时要小心,如果列表足够大,可能会得到一个堆栈Overflow@Hmmas-通过编辑在您的代码中添加注释。@Hmmas如果有帮助,请接受我的回答否,
-3*4
不是
-14
:-)非常感谢您的时间。但是,我不应该将我可以给任意多个我喜欢的数字。我应该从递归中得到一个指针,以找出哪个节点导致我的treaty@Hmmas这只是一个示例-您可以修改它以获得您喜欢的节点,而不是创建变量。
struct node* findNode(struct node *junc) {
    //Success
    if(junc->link->link==NULL){
      printf("SUCCESS");
      return NULL;
    }
    //Failure        
    if (((junc->content)*(junc->link->content))>=((junc->link->content)*(junc->link->link->content))) {
      printf("FAIL.");
      printf("\nFAIL because of numbers:%d %d.",junc->link->content,junc->link->link->content);
      return junc;                              
    }           
    return(findNode(junc->link));
}
#include <stdio.h>

struct node {
    int content;
    struct node* next;
};

struct node* findNode(struct node* node) {
    if(node->next->next == 0){
      printf("SUCCESS");
      return 0;
    }

    if ((node->content * node->next->content) <= (node->next->content * node->next->next->content)) {
      printf("FAIL because of numbers: %d and %d", node->next->content, node->next->next->content);
      return node;                              
    }   

    return(findNode(node->next));
}

int main() {
    struct node node1 = {5, 0};
    struct node node2 = {4, &node1};
    struct node node3 = {-1, &node2};
    struct node node4 = {-2, &node3};
    struct node node5 = {4, &node4};
    struct node node6 = {-3, &node5};

    struct node* res = findNode(&node6);

    if (res != 0) {
        // res is a pointer to the wrong node
    }

    return 0;
}