Преобразование рекурсии в цикл
От: igor-booch Россия  
Дата: 23.08.09 12:19
Оценка:
Решил протестировать способность Nemerle преобразоовать рекурсию в цикл. Написал простую функцию для вычисления n-го числа Фибоначчи:
using System;
using System.Console;
using Nemerle.Utility;

module Program
{
  Main() : void
  {
    def Fib(num : uint)
    {
      | 0U | 1U => 1 :> ulong
      | n => Fib(n - 1) + Fib(n - 2)
    }  
  
    WriteLine(Fib(100));
    ReadLine();
  }
}


Судя по скорости выполнения никакого преобразования в цикл не произошло (IL не изучал). Аналогичная программа на С# c использованием циклов выполняется мгновенно:
using System;

namespace ConsoleApplication10
{
  class Program
  {
    static void Main(string[] args)
    {
      ulong prev = 1;
      ulong next = 1;

      for (int i = 0; i < 99; i ++)
      {
        ulong tempNext = next;
        next = prev + next;
        prev = tempNext;
      }

      Console.WriteLine(next);
      Console.ReadLine();
    }
  }
}

Скорей всего для вычисления факториала было бы то же самое.

07.09.09 19:07: Перенесено модератором из 'Nemerle' — VladD2
http://rsdn.ru/Info/rules.xml
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.