递归求和任务的错误答案
Wrong Answer with Recursive Sum Task
我正在解决一个问题,使用递归打印所有总和等于给定数字 n 的非递增子序列。我知道我的递归算法有问题,但是我已经多次浏览了该过程,但找不到我的错误。使用输入 4,我的代码给出输出:
四 431 4322 432211 43213 4321321 43213212 4321321211我相信递归保留了过去递归调用中使用的先前数字或总和,但找不到原因。任何人都可以帮我弄清楚为什么程序没有给出正确的输出吗?
#include <iostream>
#include <string>
using namespace std;
int n;
void sums(int sum, string str)
{
if (sum==n)
{
cout << str << "n";
return;
}
for (int i = n-sum; i >= 1; i--)
{
str+=to_string(i);
sums(sum+i, str);
}
}
int main()
{
cin >> n;
string s = "";
sums(0, s);
}
问题出在你的:str+=to_string(i);
在你的 for 循环中。
在第一次调用时,您的总和为 0,str = ",在 for 循环中,它从 i = 4,i 开始--.但是在正文内部,您附加到 str += 4 并调用 sums(4, "4"(,错误发生在下一个循环 i--, str += "3" 并变为 "43" 和 sums(3, "43"(;
您可以通过不修改 str 而是调用来修复它sums(sum + i, str + to_string(i));
根据我对递归函数的理解,我认为根本不应该有循环! 所以,替换 :
for (int i = n-sum; i >= 1; i--)
{
str+=to_string(i);
sums(sum+i, str);
}
由:
str+=to_string(n-sum);
sums(n-sum, str);
相关文章:
- 递归求和任务的错误答案
- 为什么我在代码厨师的 CMPRSS 问题中得到 WA(错误答案)?
- 请找出我的代码中的错误,它在提交得到错误答案的同时仍然适用于我的所有测试用例
- 寻找最小楼梯成本的动态规划问题的错误答案
- 为什么可变大小的数组会导致Codechef出现错误答案
- 如何修复此代码对几个测试用例的错误答案?
- 使用幂函数的计算给出了大数字的错误答案
- 快速排序算法,一些特定输入序列的错误答案和分段错误
- 二分法程序的错误答案(C++)
- 无法理解绘图程序中的错误答案
- C++ - 整数除以整数返回错误答案
- 布尔函数的错误答案
- SPOJ FASTFLOW上的错误答案
- 代码的错误答案是在Java Camel案件和C 下划线标识符之间转换的错误答案
- 200万以下所有素数的总和,线程给出错误答案
- 0-1整数背包返回错误答案(动态编程)
- UVa 在线判断 - 3n + 1 - 错误答案
- 提升C++原始算法错误答案
- 二项式系数函数C++错误答案 n>13
- 需要帮助以避免 SPOJ 上的"错误答案"