昨天看了csdn上一老师发了一道题:

感觉很有难度啊,主要是递归
以下贴出代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
private static int sum1= 0;
static void Main(string[] args)
{
Console.WriteLine("请输入要拆分的数:");
sum1 = Int32.Parse(Console.ReadLine());
Console.WriteLine("请输入要拆分为几个数:");
int n = Int32.Parse(Console.ReadLine());
Console.WriteLine("请输入区间数之最小的:");
int min =Int32.Parse(Console.ReadLine());
Console.WriteLine("请输入区间数最大的数:");
int max = Int32.Parse(Console.ReadLine());
getSum(sum1, n, min, max);
Console.ReadLine();
}
public static void getSum(int sum, int n, int min, int max)
{
int[] array = new int[n];
Dosimpt(array, 0, min, max);
}
public static void Dosimpt(int[] array, int n, int minValue, int maxValue)
{
if (n >= array.Length)
{
//判断结果是否符合相加等于sum
if (Istrue(array))
{
PrintConseole(array);
}
return;
}
for (int i = minValue; i <= maxValue; i++)
{
array[n] = i;
Dosimpt(array, n + 1,i, maxValue);
}
}
public static bool Istrue(int[] array)
{
int j = 0;
for (int i = 0; i < array.Length; i++)
{
j += array[i];
}
if (j == sum1)
{
return true;
}
else
{
return false;
}
}
public static void PrintConseole(int[] array)
{
string ss = "";
for (int i = 0; i < array.Length; i++)
{
ss += array[i].ToString() + "+";
}
Console.WriteLine(ss.Substring(0,ss.Length-1));
}
}
}
以上代码已经验证成功
本文探讨了一道由优快云用户提出的递归难题,通过解析代码逻辑,实现了一个功能,即根据输入的数值、拆分数目以及区间限制,找出符合条件的数列组合。详细解释了递归函数的实现过程,包括初始化、递归调用和终止条件,并展示了如何通过打印函数输出符合要求的数列。验证代码已成功运行并得到正确结果。
1万+

被折叠的 条评论
为什么被折叠?



