在 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; 语句。