рекурсия - зло ? пример из книги.

Тема в разделе "WASM.HEAP", создана пользователем varnie, 20 июн 2008.

  1. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    Это в килогерцах, и что за проц такой если не секрет ?
     
  2. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    Незачем, но вообще ,по-моему, следует избегать в функции делать более одного рекурсивного вызова,если только заранее не известно их максимально возможное количество
     
  3. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    CrystalIC

    Это AMD Turion x2 1600MHz
    А время я указал правильное - сам подумай, при таком алгоритме сколько рекурсивных вызовов придется сделать...
     
  4. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    zhindos
    Прикинул, не более 0.16 миллисекунды без учёта планирования.
     
  5. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    CrystalIC

    Чем компилил?
     
  6. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    CrystalIC

    Может я в чем-то и неправ, но:

    Код (Text):
    1. __int64 FibProc(int n)
    2. {
    3.     int res;
    4.     if (n < 2)
    5.         return 1;
    6.     __asm
    7.     {
    8.         sub    n, 1
    9.         push  n
    10.         call    FibProc
    11.         add    esp, 4
    12.         mov   res, eax
    13.         sub    n, 1
    14.         push  n
    15.         call    FibProc
    16.         add    esp, 4
    17.         add    res, eax
    18.     }
    19.     return res;
    20. }
    MS Visual Studio 2005
    Optimization - disabled ~ 8 sec
    Optimization - maximize speed ~ 2 sec

    Код (Text):
    1. FibProc proc    near
    2.  
    3. n   equ     dword ptr [ebp + 4]
    4. res equ     dword ptr [ebp - 4]
    5.    
    6.     enter       4, 0
    7.     cmp         n, 2
    8.     jge             rec
    9.     mov         eax, 1
    10.     jmp             _ret
    11. rec:
    12.     dec     n
    13.     push        n
    14.     call        FibProc
    15.     add     esp, 4
    16.     mov         res, eax
    17.     dec     n
    18.     push        n
    19.     call            FibProc
    20.     add     esp, 4
    21.     add         res, eax
    22.     mov         eax, res
    23. _ret:
    24.     leave  
    25.     ret
    26.  
    27. FibProc endp
    TASM 4.1 ~ 4 sec