我具有不使用递归和的基本代码。一个不使用递归的变量将在链表中所有整数的总和后打印出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张。
答案 0 :(得分:0)
我发现递归的新手使他们的功能变得比必要的更为复杂。考虑:
int rllsum(struct lnodetype *t)
{
int sum = 0;
if (t != NULL)
{
sum = t->val + rllsum(t->ptr);
}
return sum;
}
此外,如图所示,您的main
函数已损坏:未定义的n
变量;缺少花括号;尝试printf()
两个数字,但仅提供一个。