Рекурсивный вызов метода - PullRequest
0 голосов
/ 10 апреля 2020

Мне нужно вызвать метод, и до тех пор, пока ответ не станет равным 1, мне нужно будет запускать этот метод снова и снова.

Мой код выглядит так:

public class TrackdoId
{
    public static string PsExecTrack(string query, string execFile)
    {
        string result = null;
        string PSData = "";
        var proc = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                FileName = execFile,
                Arguments = query,
                UseShellExecute = false,
                RedirectStandardOutput = true,
                CreateNoWindow = true
            }
        };

        proc.Start();
        log.Debug("PSExec Process started for checking log file");
        while (!proc.StandardOutput.EndOfStream)
        {
            PSData += proc.StandardOutput.ReadLine();
        };

        string doid = PSData.Substring(PSData.IndexOf("{"));
        dynamic data = JObject.Parse(doid);

        string count = data.reportedCount;
        int asset = Int32.Parse(count);

        while (asset != 1)
        {
            TrackdoId.PsExecTrack(query, execFile)
        }
        return result;
    }
}

Но это приводит к бесконечному l oop.

Как правильно достичь этого?

1 Ответ

1 голос
/ 10 апреля 2020

Рекурсивным функциям для достижения успеха требуются три вещи:

  1. Условие выхода,
  2. Работа, в том числе то, что влияет на условие выхода
  3. Рекурсивный вызов .

Я предлагаю условие выхода быть первой вещью в вашем рекурсивном методе.

while l oop, который у вас там, на самом деле не имеет смысла; если вы собираетесь l oop с while, вам, вероятно, не нужен рекурсивный вызов.

Итог? Вам нужно условие выхода, которое работает.


Вот пример рекурсивной функции, которая работает:

int factorial(int n) 
{
   if(n == 1) return 1;
   return n * factorial(n - 1);
}

, и вот как она работает:

enter image description here

...