Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++11 递归0-1背包_C++11_Recursion_Knapsack Problem - Fatal编程技术网

C++11 递归0-1背包

C++11 递归0-1背包,c++11,recursion,knapsack-problem,C++11,Recursion,Knapsack Problem,这里我有两个函数用于递归背包问题,而背包()给出了正确的输出(即220),但背包1()给出了错误的值(即60)。有人能解释一下原因吗 #include<iostream> #include<stdio.h> using namespace std; long knapsack1(long w,long wt[],long val[],long n) { if(n==0||w==0) { return 0;

这里我有两个函数用于递归背包问题,而背包()给出了正确的输出(即220),但背包1()给出了错误的值(即60)。有人能解释一下原因吗

#include<iostream>
#include<stdio.h>
using namespace std;

 long knapsack1(long w,long wt[],long val[],long n)
    {
        if(n==0||w==0)
        {
            return 0;
        }
        if (wt[n] > w)
        {
        n--;
        }
        else
        {
            return max(knapsack1(w,wt,val,n-1),val[n]+knapsack1(w-wt[n],wt,val,n-1));
        }
    }

 long knapsack(long w,long wt[],long val[],long n)
    {
        if(n==0||w==0)
        {
            return 0;
        }
        if (wt[n] > w)
        { 
       return knapsack(w, wt, val, n-1);
        }
        else
        {
            return max(knapsack(w,wt,val,n-1),val[n]+knapsack(w-wt[n],wt,val,n-1));
        }
    }
int main()
{
   long val[] = {60, 100, 120};
    long wt[] = {10, 20, 30};
    long  w = 50;
    long n = sizeof(val)/sizeof(val[0]);
    printf("%d", knapsack(w, wt, val, n));
    printf("%d", knapsack1(w, wt, val, n));
    return 0;
}
#包括
#包括
使用名称空间std;
长背包1(长w,长wt[],长val[],长n)
{
如果(n==0 | | w==0)
{
返回0;
}
如果(wt[n]>w)
{
n--;
}
其他的
{
返回最大值(背包1(w,wt,val,n-1),val[n]+背包1(w-wt[n],wt,val,n-1));
}
}
长背包(长w,长wt[],长val[],长n)
{
如果(n==0 | | w==0)
{
返回0;
}
如果(wt[n]>w)
{ 
返回背包(w、wt、val、n-1);
}
其他的
{
返回最大值(背包(w,wt,val,n-1),val[n]+背包(w-wt[n],wt,val,n-1));
}
}
int main()
{
长val[]={60100120};
长wt[]={10,20,30};
长w=50;
长n=sizeof(val)/sizeof(val[0]);
printf(“%d”,背包(w,wt,val,n));
printf(“%d”,背包1(w,wt,val,n));
返回0;
}

尝试在启用警告的情况下编译它。
背包1
中的
if
-分支未返回值,并且行为未定义。

通过基本调试您学到了什么?您应该能够描述您的控件和/或数据流中有哪些未按预期运行。请看这个可爱的博客寻求帮助。