Lipetsk *nix Association Forum Lipetsk *nix Association Forum
Новости:
 
*
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
28 Сентября 2024, 04:34:30


Войти


Страниц: 1 ... 3 4 [5] 6   Вниз
  Печать  
Автор Тема: Программирование под linux  (Прочитано 83434 раз)
0 Пользователей и 23 Гостей смотрят эту тему.
marvin
Новичек
*

Карма: 0
Сообщений: 7


Награды
« Ответ #60 : 08 Марта 2008, 19:24:45 »

Надеюсь, не грех похвастаться. :-) Nemerle. Во второй функции используется макрос Memoize, реализующий соответствующую оптимизацию.

Код:
using Nemerle;
using System;
using System.Diagnostics;

namespace Fibonacci
{
  module Main
  {
    static Fib1(n : int) : int
    {
      | 0 => 0
      | 1 => 1
      | _ => Fib1(n - 1) + Fib1(n - 2)
    }
   
    [Memoize]
    static Fib2(n : int) : int
    {
      | 0 => 0
      | 1 => 1
      | _ => Fib2(n - 1) + Fib2(n - 2)
    }
   
    static TestFib(fib : int -> int) : void
    {
      def sw = Stopwatch();
      sw.Start();
     
      def result = fib(46);
     
      sw.Stop();
     
      Console.WriteLine($"Result: $result Time: $(sw.Elapsed.TotalSeconds)");
    }
   
    public static Main() : void
    {
      TestFib(Fib1);
      TestFib(Fib2);
    }
  }
}

Вывод:
Result: 1836311903 Time: 62,7802466
Result: 1836311903 Time: 0,0022332

Записан
Страниц: 1 ... 3 4 [5] 6   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2011, Simple Machines

Valid XHTML 1.0! Valid CSS! Dilber MC Theme by HarzeM