c - 如何使用递归在链表中添加整数?
问题描述
我在不使用递归和 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 个。
解决方案
我发现那些不熟悉递归的人会使他们的函数变得比必要的复杂。考虑:
int rllsum(struct lnodetype *t)
{
int sum = 0;
if (t != NULL)
{
sum = t->val + rllsum(t->ptr);
}
return sum;
}
此外,如图所示,您的main
函数已损坏:未定义n
变量;缺少花括号;尝试printf()
两个数字,但只提供一个。
推荐阅读
- typescript - 如何在打字稿中禁用独角兽/首选模块?
- java - 无法为华为P10构建HMS Core插件ReactNative
- ios - Ionic ios由于一项的小动画而重新呈现完整页面?
- javascript - sftpConnect:远程主机已重置连接:在使用 ssh2-sftp-client 时在节点 js 中读取 ECONNRESET
- python - 神经网络:经过时代的 nb 张照片 + 处理输入大小
- c# - 如何在 IdentityServer4 的授权代码流中手动生成代码?
- mongodb - Nestjs - Mongoose - 虚拟字段 - 无法在 graphql 操场上查询
- swift - RealityKit – 将对象始终保持在屏幕前
- php - 我总是得到一个带有 GdImage 的 Uncaught TypeError 并且我不知道如何解决它
- vue.js - 如何在 Vuetify 中更改颜色主题?