Тема: Рекурсивне завантаження сторінок C#

Привіт!
Моя програма зберігає локально html файл, знаходить в документі url адресу, знаходить ip а потім в файл 1 заносить url з однаковим ip а в 2 різні.
Підкажіть мені, будь ласка, як написати рекурсивну функцію яка б виконувала завантаження сторінок(url з 1 файлу) заповнюючи ті 2 файли. І виконати рекурсію n раз
Код програми:

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;
using System.Net;
using HtmlAgilityPack;
using System.Text.RegularExpressions;
using System.IO;


namespace Myrecursion
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e) //дозвояє знати IP адеру по URL
        {
            var url = input.Text;
            Uri myUri = new Uri(url);
            var ip = Dns.GetHostAddresses(myUri.Host)[0];
            label1.Text = ip.ToString();// ip address

        }

        private void button2_Click(object sender, EventArgs e)
        {
            string path = @"D:\test.html";
            using (WebClient client = new WebClient()) //save page
            {

                WebClient webClient = new WebClient();
                webClient.Encoding = System.Text.Encoding.UTF8;

                webClient.DownloadFile(input.Text, path);
                
            }
//для того, щоб отримати з html сторінки url адресу
            string text = File.ReadAllText(path);
            string patTemp = @"(http|ftp|https):\/\/([\w\-_]+(?:(?:\.[\w\-_]+)+))([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?";
            foreach (Match item in Regex.Matches(text, patTemp))
            { /// url->ip
                Uri myUri = new Uri(item.Value);
                var ip = Dns.GetHostAddresses(myUri.Host)[0];
                 richTextBox1.Text += item.Value + " IP address: " + ip + "\n";
                string tempIP = ip.ToString();
                if (label1.Text != tempIP)
                {
                    richTextBox3.Text += item.Value +  "\n";
                   // richTextBox3.Text += item.Value + " IP address: " + ip + "\n";
                    File.WriteAllText(@"D:\zadanie4_1.txt", richTextBox2.Text);
                }
                else {
                    richTextBox2.Text += item.Value  + "\n";
                   // richTextBox2.Text += item.Value + " IP address: " + ip + "\n";
                    File.WriteAllText(@"D:\zadanie4_2.txt", richTextBox3.Text);
                }
            }

        }

        private void button3_Click(object sender, EventArgs e)//  tutaj próbowałam sama pisać, ale się nie udało
        {
            // var ans = 0;
            //    ans = Myfunk();//my func recursion
     

            string mypath = @"D:\zadanie4_1.txt";
            string[] text = File.ReadAllLines(mypath);
            foreach (string value in text)
            {
                //richTextBox4.Text+=value+"\n";
                // string[] text1 = File.ReadAllLines(value);
                Uri myUri = new Uri(value);
                var ip1 = Dns.GetHostAddresses(myUri.Host)[0];
                string path = @"D:\recursion.html";
                WebClient webClient = new WebClient();
               webClient.DownloadFile(value, path);
                    // richTextBox4.Text += value + " " + ip1 + "\n";
                  // string test = File.ReadAllText(value);
           }

        }


      

        private static void Myfunk()
        {
            //string mypath = @"D:\zadanie4_1.html";
            //string text = File.ReadAllText(mypath);
            //foreach (int myrec in text) {
            //}
        }
    }

}