【问题标题】:The output of the recursive function is coming out to be wrong , i cant find any mistake in the code [closed]递归函数的输出是错误的,我在代码中找不到任何错误[关闭]
【发布时间】:2022-01-25 09:54:02
【问题描述】:

该函数的目的是找出给定数组中的数字是否可以形成给定的和。它可以根据需要多次使用数组中的数字来获得总和。任何人都可以找到逻辑中的缺陷。我正在使用递归来解决问题

#include <bits/stdc++.h>

using namespace std;

bool findsum(int targetsum , vector<int> arr)
{
    if(targetsum == 0)
        { return true;
        }
    
    
    if(targetsum < 0)
        { return false;
        }
        
    for(int i = 0 ; i < arr.size(); i++)
    {
            int rem = targetsum - arr[i];
            if (findsum(rem,arr) == true);
            {
                return true;
            }
        
    }
    
    return false;
}





int main()
{
    int a = 4;
    vector<int> array{5};
    cout << findsum(a,array);
}

【问题讨论】:

  • 这并没有解决问题,但if (findsum(rem,arr) == true)应该写成if (findsum(rem,arr))
  • 哪一个都可以用吧?
  • 它们的意思相同。就像if (i == 0)if ((i == 0) == true) 的意思一样。

标签: c++ recursion dynamic-programming


【解决方案1】:

if 语句后有一个分号。这表示 if 语句的结束。

if (findsum(rem,arr) == true);
{
    return true;
}

无论条件的值如何,上面的代码都会返回 true。 这个错误很常见,如果你打开警告,现代编译器会警告你,你应该这样做。

【讨论】:

  • thx 成功了,我一直在摸不着头脑,以为我的逻辑是错误的。我使用的是 dev c++,我会确保下次打开警告
猜你喜欢
  • 1970-01-01
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 2021-04-27
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
相关资源
最近更新 更多