You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CLISP如何不使用setf等命令式变量输出小于上限的斐波那契序列

问题原因

  • 原有代码将上限参数同时用作递归步长计数器,每次调用执行(1- n)操作导致上限值不断被修改,当判断a < n时使用的已经不是最初传入的上限阈值,最终触发终止条件时漏掉了小于原始上限的89。
  • 条件判断逻辑结构错误,原有代码的括号配对与分支逻辑不符合需求,错误将终止条件和递归触发条件写反。

修复后代码

(defun fibonacci (limit &optional (a 0) (b 1))
  (if (>= a limit)
      nil
      (cons a (fibonacci limit b (+ a b)))))

实现说明

  • 全程不对上限参数limit做修改,递归调用时直接传递原始值作为阈值判断依据,完全不需要使用set/setq/setf等命令式变量声明语句,通过可选参数传递斐波那契计算的中间状态,符合纯函数式实现要求。
  • 终止条件设为当前计算值a大于等于上限时返回空,否则就将当前值加入结果序列,继续递归计算下一个斐波那契数。
  • 调用(fibonacci 100)即可得到预期输出(0 1 1 2 3 5 8 13 21 34 55 89)。

内容的提问来源于stack exchange,提问作者Budgetninja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:27:03