Если чётко описать типы входных и выходных данных функции, определить в спецификации пред- и пост-условия, то логику придётся формировать простыми приёмами, "не думая" == структура программы естественно следует за используемой ей структурой данных.