c - 如何在c中的递归中打印使用的结构?
问题描述
我写了一个名为的函数rucksack
,它接受一个线性列表和一个限制权重的限制器。该函数返回您可以在不超过 4500 重量的情况下选择的所选项目的最大成本。
#include <stdio.h>
struct item {
int weight; // Artikelgewicht in Gramm
int value; // Artikelwert in Euro
int stock; // Vorhandene Artikelmenge
struct item *next;
};
struct item laptop = {1500, 1000, 3, NULL};
struct item tablet = { 700, 300, 2, &laptop};
struct item mobile = { 180, 500, 2, &tablet};
struct item *items = &mobile;
int max(int a,int b)
{
return a > b ? a : b ;
}
int rucksack ( struct item* item , int limit)
{
if (item == NULL)
return 0 ;
int sum = 0 ;
for (int i = 0 ; i<= item->stock && i * item->weight<=limit ; i++)
sum = max(sum, i * item->value + rucksack (item->next , limit - i*item->weight )) ;
return sum;
}
int main() {
printf("%d", rucksack(items, 4500));
}
我想知道选择了哪些项目组合,但我不知道如何在递归中实现它。有人可以帮忙吗?
解决方案
推荐阅读
- tensorflow - 如何使用 tensorflow 对一类数据进行分类?
- javascript - 更新一个依赖会破坏另一个也在使用它的依赖(传递)
- regex - “除零外的十进制数”的正则表达式是什么
- python - Python 语法错误(无效语法)
- c# - 为什么当我将我的 StreamWriter/StreamReader/NetworkStream 包含在 using 语句中时,我的服务器会崩溃 c#
- javascript - 按钮未在 javascript 中启用
- python - Python 3:我的类函数没有像我想要的那样运行
- windows - 正确使用方法:Vagrant vagrant_vagrantfile synced_folder 到 docker 卷?
- firebase - 如何循环通过 Firebase 数据快照子子项?扑
- node.js - 统计数十万条数据导致Cross-Origin Read Blocking (CORB) 使用nodejs阻止跨域