// итерация
void f(...)
{
for (int k = 0; k < s; ++k)
g(k);
}
// рекурсия
void f(..., int k = 0)
{
g(k);
if (k < s)
f(..., k + 1);
}
Задача о 8-ми ладьях. Сделал, но итеративно, а нужно рекурсивно
Ребят, помогите мне пожалуйста: На шахматной доске нужно разместить 8 ладей так, чтобы ни одна ладья не угрожала другой. Я сделал, но итеративно, подскажите, как это можно сделать рекурсивно.
С алгоритмом не разбирался, но втупую преобразовать итерацию в рекурсию можно, например, так:
З.Ы. Хотя с ладьями задача не имеет смысла: расставил их по диагонали - и все дела.
Код:
class Program
{
static List<int> LstInt = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8 };
static Random R = new Random(DateTime.Now.Millisecond);
static void NextRoundPos(int n)
{
if (n == 0) return;
else
{
int now = R.Next(n);
Console.WriteLine(string.Format("[{0},{1}]", n, LstInt[now]));
LstInt.RemoveAt(now);
NextRoundPos(n - 1);
}
}
static void Main(string[] args)
{
NextRoundPos(8);
}
}
{
static List<int> LstInt = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8 };
static Random R = new Random(DateTime.Now.Millisecond);
static void NextRoundPos(int n)
{
if (n == 0) return;
else
{
int now = R.Next(n);
Console.WriteLine(string.Format("[{0},{1}]", n, LstInt[now]));
LstInt.RemoveAt(now);
NextRoundPos(n - 1);
}
}
static void Main(string[] args)
{
NextRoundPos(8);
}
}
Ну тогда итерацией задача решается лаконичнее, чем рекурсией :rolleyes: