Если у вас есть, например, «Диспетчер задач Windows» работает, и вы увидите, что ваш ЦП работает с полной нагрузкой, пока устройство зависло. Вы только что создали слишком много работы; вам нужен более эффективный алгоритм. Нажмите клавишу «прерывание» в интерактивном режиме F # (Ctrl-. В окне FSI в Visual Studio), чтобы остановить обработку.
Если биг-о не ясно, вы можете добавить несколько распечаток, чтобы показать, сколько работы уже сделано. Э.Г.
let NumberOfDivisors n =
printf "%d" n // added
seq {1 .. n} |> Seq.filter (fun i -> n % i = 0) |> Seq.length;;
let HasMoreThanDDivisors n d =
if NumberOfDivisors n >= d then
true
else
false
let rec FindFirstTriangle (index, number, divisors) =
printfn "" // added
if HasMoreThanDDivisors number divisors then
number
else
let nextIndex = index + 1
let nextNumber = number + index
FindFirstTriangle (nextIndex, nextNumber, divisors);;
и затем запустите FindFirstTriangle с большими и большими числами, чтобы понять, что происходит.