LINUX.ORG.RU

[haksell] итерационные вычисления


0

2

Допустим, есть недешёвая функция

f :: Integer -> Integer
. Задача заключается в том, чтобы подобрать такое значение
a
, чтобы
f a == x
, где x наперёд задано. Перебор большой, от 1 до 10^7.

Дабы избавиться от излишней ленивости, используем рекурсию.

findX :: Integer -> Integer
findX n = 
    if f n == x then n
    else findX (n+1)

Вычисления медленные и не представляют никаких данных для мониторинга. Совершенно не ясно, на каком аргументе в данный момент производится перебор.

Как можно реализовать следующие вещи?

1) Переборную функцию, вычисляющую значение f n сразу, если оно нас не устраивает, переходящую к следующему кандидату?

2) Некий аналог итерационного перебора (псевдокод):

for n = 1:10^7 do
    if f n == x then printf "n founded (n)!"
    else printf "testing n failed";
done 

Ответ на: комментарий от tensai_cirno

Вопрос на самом деле и связан с задачкой с project euler. Не очень понимаю, правда, как этот ресурс связан с реальными задачами.

garmonbozia
() автор топика
Ответ на: комментарий от tensai_cirno

Ответь в жиббир, пожалуйста, не хочу здесь оффтопить.

garmonbozia
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.