在 C# 中使用 Divide et Impera 进行向量折叠
Vector folding using Divide et Impera in c#
我在大学遇到麻烦 project.The 项目需要使用 c# 作为编程语言来完成,并以 Windows 形式制作。
程序执行。我知道它有缺陷,但至少我想知道如何解决这个错误: http://postimg.org/image/gwuzmyc73/ 。
对于这个问题,我需要使用 Divide et Impera 折叠矢量。
我需要从键盘 n 中插入一个数字,生成的向量就像 a=(1,2,3,4,5,6,7),最后的元素是 1,3,5,7。
问题听起来像:
n elements.We 的向量通过重叠 2 个半部来定义其折叠,如果 n 是 odd.The 2 个半部再次折叠直到子向量达到 1 element.Utilize Divide et Impera。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Plierea_Vectorilor
{
public partial class Form1 : Form
{
public int n;
public int i;
public int[] efinal = new int[50];
public string m = new string(new char[50]);
public int Ls, Ld;
public char[] aux = new char[50];
public Form1()
{
InitializeComponent();
}
public void Pliaza(int p,int q)
{
if (p == q)
{
efinal[p] = 1;
}
else
{
if ((q - p + 1) % 2 != 0)
{
Ls = (p + q) / 2 - 1;
}
else
{
Ls = (p + q) / 2;
}
Ld = (p + q) / 2 + 1;
}
Pliaza(p, Ls);
Pliaza(Ld, q);
/*
string ss = Ls.ToString();
string sd = Ld.ToString();
for (i = p; i <= Ls; i++)
{
aux[0] = 'S';
string.Concat(aux, ss);
string.Concat(aux, " ");
string m = aux.ToString();
string.Concat(aux, m[i]);
}
for ( i = Ld; i <= q; i++)
{
aux[0] = 'D';
string.Concat(aux,Ld);
string.Concat(aux, " ");
string m = aux.ToString();
string.Concat(aux, m[i]);
}
*/
}
private void button1_Click(object sender, EventArgs e)
{
Pliaza(1, n);
for (i = 1; i <= n; i++)
{
if (efinal[i]!=0)
{
label2.Text = Convert.ToString(i);
}
}
}
private void label2_Click(object sender, EventArgs e)
{
}
}
}
您总是从 Pliaza 执行 Pliaza 功能。你没有错过完成条件吗?
递归循环必须在某个时候以某种方式完成,否则你会得到堆栈溢出。
A WhosebugException
通常意味着您正在进行不受控制的递归。查看您的代码,我看到 Pliaza
使用不同的变量调用自身两次...但是 没有 路径供 Pliaza
退出 没有 调用自己。您需要一些路径让递归触底。这很可能是在 efinal[p] = 1;
行之后添加 return;
语句。
我在大学遇到麻烦 project.The 项目需要使用 c# 作为编程语言来完成,并以 Windows 形式制作。 程序执行。我知道它有缺陷,但至少我想知道如何解决这个错误: http://postimg.org/image/gwuzmyc73/ 。 对于这个问题,我需要使用 Divide et Impera 折叠矢量。 我需要从键盘 n 中插入一个数字,生成的向量就像 a=(1,2,3,4,5,6,7),最后的元素是 1,3,5,7。 问题听起来像: n elements.We 的向量通过重叠 2 个半部来定义其折叠,如果 n 是 odd.The 2 个半部再次折叠直到子向量达到 1 element.Utilize Divide et Impera。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Plierea_Vectorilor
{
public partial class Form1 : Form
{
public int n;
public int i;
public int[] efinal = new int[50];
public string m = new string(new char[50]);
public int Ls, Ld;
public char[] aux = new char[50];
public Form1()
{
InitializeComponent();
}
public void Pliaza(int p,int q)
{
if (p == q)
{
efinal[p] = 1;
}
else
{
if ((q - p + 1) % 2 != 0)
{
Ls = (p + q) / 2 - 1;
}
else
{
Ls = (p + q) / 2;
}
Ld = (p + q) / 2 + 1;
}
Pliaza(p, Ls);
Pliaza(Ld, q);
/*
string ss = Ls.ToString();
string sd = Ld.ToString();
for (i = p; i <= Ls; i++)
{
aux[0] = 'S';
string.Concat(aux, ss);
string.Concat(aux, " ");
string m = aux.ToString();
string.Concat(aux, m[i]);
}
for ( i = Ld; i <= q; i++)
{
aux[0] = 'D';
string.Concat(aux,Ld);
string.Concat(aux, " ");
string m = aux.ToString();
string.Concat(aux, m[i]);
}
*/
}
private void button1_Click(object sender, EventArgs e)
{
Pliaza(1, n);
for (i = 1; i <= n; i++)
{
if (efinal[i]!=0)
{
label2.Text = Convert.ToString(i);
}
}
}
private void label2_Click(object sender, EventArgs e)
{
}
}
}
您总是从 Pliaza 执行 Pliaza 功能。你没有错过完成条件吗?
递归循环必须在某个时候以某种方式完成,否则你会得到堆栈溢出。
A WhosebugException
通常意味着您正在进行不受控制的递归。查看您的代码,我看到 Pliaza
使用不同的变量调用自身两次...但是 没有 路径供 Pliaza
退出 没有 调用自己。您需要一些路径让递归触底。这很可能是在 efinal[p] = 1;
行之后添加 return;
语句。