首页 新闻 会员 周边

这段JavaScript代码转换为其他语言(方法不能嵌套)怎么写?

0
悬赏园豆:10 [已解决问题] 解决于 2012-09-05 08:39
var fibonacci = (function() {
  var memo = {};
  function f(n) {
    var value;
    if (n in memo) {
      value = memo[n];
    } else {
      if (n === 0 || n === 1)
        value = n;
      else
        value = f(n - 1) + f(n - 2);
      memo[n] = value;
    }
    return value;
  }
  return f;
})();

上面是一个优化了的递归法求fibonacci数列的方法,转换为其他语言(方法不能嵌套)怎么写?

草根程序猿的主页 草根程序猿 | 初学一级 | 园豆:129
提问于:2012-09-04 10:54
< >
分享
最佳答案
0

不支持方法嵌套的语言要引入一个全局变量,这里给出C#中的写法,其他语言应该都可以这样写:

static void Main(string[] args)
{
    Console.WriteLine(fibonacci(3));//2
    Console.WriteLine(fibonacci(60));//1548008755920
    Console.WriteLine(fibonacci(100));//3736710778780434371

    Console.Read();
}

static Dictionary<int, long> memo = new Dictionary<int, long>();

static long fibonacci(int n)
{
    long value = 0;
    if (memo.ContainsKey(n))
        value = memo[n];
    else
    {
        if (n == 0 || n == 1)
            value = n;
        else
            value = fibonacci(n - 1) + fibonacci(n - 2);
        memo[n] = value;
    }
    return value;
}

时间复杂度为O(2n)

收获园豆:10
artwl | 专家六级 |园豆:16736 | 2012-09-04 11:02

不是已经优化过了吗,时间复杂度还是O(2n)吗?

博爸 | 园豆:220 (菜鸟二级) | 2012-09-05 14:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册