相关疑难解决方法(0)

解决斐波纳契的方法

我想尝试学习Lisp,但我很快就放弃了.我想我会再试一次.我正在关注Euler项目的问题2 - 找到所有甚至斐波那契数字低于4百万的总和.

我写了下面的代码,但有各种丑陋.其中最主要的是它太慢了 - 因为它一直在进行天真的递归.

当我用Python编写这个程序时,我按计算建立了一个列表,从不重新计算数字.我知道我可以在这里(不知何故)这样做,但这似乎不是真正的lisp精神,函数式编程.我在#3之后放弃了,当我达到递归深度限制并且不得不重写我的代码以使用循环而不是递归.

所以我想我的问题是:

  1. 什么是解决这个问题的'正确,积极的方式'?
  2. 你如何协调递归和"只计算一切"的概念与计算一切的实际限制?
  3. 除了Little Schemer和Project Euler之外,还有任何关于学习lisp的建议吗?

这是我的代码:

 (defun fib(i)
   (if (= i 1)                   ;Could rewrite this as a case statement
     1
     (if (= i 2)
       1
       (+ (fib (- i 1)) (fib (- i 2))))))

 (defun solve(i)
   (let ((f (fib i)))            ;Store result in local variable
     (print f)                   ;For debugging
     (if (< 4000000 f)
       0                         ;return
       (if (= 0 (mod f 2))
         (+ f (solve (+ i 1)))   ;add number
         (solve (+ …
Run Code Online (Sandbox Code Playgroud)

lisp common-lisp fibonacci

11
推荐指数
3
解决办法
4282
查看次数

标签 统计

common-lisp ×1

fibonacci ×1

lisp ×1