首页 > 解决方案 > 如何使用递归在链表中添加整数?

问题描述

我在不使用递归和 with 的情况下构建了基本代码。不使用递归的那个会在链表中所有整数相加后打印出 67。使用我的递归程序,它似乎读取了第二个整数并停止,甚至没有将它添加到第一个整数。

我添加了一个打印语句作为测试器,以便我可以看到它在链接列表中获得的数字。

// Linked list summ - recursive

int rllsum( struct lnodetype *t )

        int sum = 0;
        while(t != NULL)
        {
                sum = t->val + sum;
                printf("%d\n", t->val);
                t = t->ptr;
                rllsum(t);
        }

        return sum;


// Basic main program

int main()

        struct lnodetype *h, *t;
        int x, y;

        // build a list
        h = NULL;
        for ( x = 0; x < 5; ++x )
        {
                t = malloc(sizeof(struct lnodetype));
                t->val = n*(x+1)*(rand()%n+1)%19+1;
                t->ptr = h;
                h = t;
                printf("%d\n", t->val);
        }

        t = h;
        y = rllsum( t );
        printf("\n%d, %d\n", y);

        return 0;

我希望输出为 67,但我可以完全确定。截至目前,它打印出 14 个。

标签: crecursionlinked-list

解决方案


我发现那些不熟悉递归的人会使他们的函数变得比必要的复杂。考虑:

int rllsum(struct lnodetype *t)
{
    int sum = 0;

    if (t != NULL)
    {
        sum = t->val + rllsum(t->ptr);
    }

    return sum;
}

此外,如图所示,您的main函数已损坏:未定义n变量;缺少花括号;尝试printf()两个数字,但只提供一个。


推荐阅读