Re: коммивояжёp

From
Ivan Boldyrev (2:5080/1003)
To
Val Krylov
Date
2003-01-17T10:21:48Z
Area
RU.ALGORITHMS
From: Ivan Boldyrev <boldyrev@dataeast.ru>

Val Krylov <Val.Krylov@p27.f1900.n5030.z2.fidonet.org> writes:

>     Любая pекypсия пpедставима итеpацией. Любая итеpация пpедставима
> pекypсией.  Элементаpный алгоpитм вида "нахождение стpоки в тексте",
> напpимеp, достаточно ясно пpедставим и в итеpативной, и в
> pекypсивной фоpме, но в pекypсивном слyчае он сводится лишь к тоннам
> мyсоpа на стеке. Мне нет необходимости пpиводить алгоpитмы к менее
> эффективным фоpмам, благо не пpиходится кодить на Хаскеле.

Делать поиск подстроки лениво, вот вам поиск символа.

/* Хорошая такая хвостовая рекурсия */
const char * findchar(const char *str, char c) {
    if (*str) {
        if (c==*str)
            return str;
        else
            return findchar(++str, c);
    } else
        return 0;
}

findchar:
        pushl   %ebp
        movl    %esp, %ebp
        movl    8(%ebp), %edx
        movb    12(%ebp), %al
        movb    (%edx), %cl
        testb   %cl, %cl
        je      .L2
        cmpb    %cl, %al
        je      .L6
        movsbl  %al,%eax
        incl    %edx
        movl    %eax, 12(%ebp)
        movl    %edx, 8(%ebp)
        popl    %ebp
        jmp     findchar
        .p2align 4,,7
.L6:
        movl    %edx, %eax
.L1:
        popl    %ebp
        ret
        .p2align 4,,7
.L2:
        xorl    %eax, %eax
        jmp     .L1

И кто же вам, уважаемый, в стеке-то намусорил? Руки или компилятор?

-- 
Ivan Boldyrev
PGP fp: 3640 E637 EE3D AA51 A59F  3306 A5BD D198 5609 8673

                                                   По дороге в не туда...
--- ifmail v.2.15dev5
 * Origin: (http://news.cca.usart.ru/) USURT's FidoNET<-> (2:5080/1003@fidonet)