【问题标题】:segmentation fault in recursion linkedlist sum c++递归链表和 C++ 中的分段错误
【发布时间】:2021-07-23 10:42:53
【问题描述】:

这是我使用递归求和的部分代码,但我遇到了分段错误。看起来问题是如何退出;但是,我想不通。

int LinkedList::sumR()
{
    int _sumR(Node* node);
}

int LinkedList::_sumR(Node* node)
{
    Node* curr = head;
    if(!curr)
        return 0;
        
    else
        return curr->value + _sumR(curr->next);
}

私人课

private:
    struct Node
    {
        Node(int value) : value(value), next(nullptr) {}
        Node(int value, Node* next) : value(value), next(next) {}

        int value;
        Node* next;
    };

    int _sumR(Node* node);
    Node* head;

【问题讨论】:

    标签: c++ recursion linked-list


    【解决方案1】:

    您应该将_sumR() 的第一行更改为此 -

    Node* curr = node;
    

    我猜head 是一个指向列表头部的成员变量。如果在每次迭代中您将curr 设置为head,那么总和将是无限次添加head 的值(或直到程序崩溃)。

    另一个问题是您不是从sumR() 调用_sumR(),而是重新定义它。

    所以正确的代码是-

    int LinkedList::sumR()
    {
        return _sumR(head);
    }
    
    int LinkedList::_sumR(Node* node)
    {
        Node* curr = node;
    
        if(!curr)
            return 0;
        else
            return curr->value + _sumR(curr->next);
    }
    

    【讨论】:

    • 非常感谢!我有另一种方法是将 _sumR (Node* node) 更改为 _sumR(Node* currHead)。我不明白如何更改函数的引用?
    • 将 _sumR (Node* node) 更改为 _sumR(Node* currHead) 是否可以解决问题?
    猜你喜欢
    • 2013-03-07
    • 2017-06-05
    • 2018-03-30
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 2017-11-12
    • 2017-12-25
    相关资源
    最近更新 更多