在 Prolog、尾递归中计算斐波那契数列

2024-04-27

我想在 Prolog 中以递归尾部模式计算斐波那契数列。

fibonacci(0,0).
fibonacci(1,1).
fibonacci(N,Result) :-
   fibonacci(N,1,0).

fibonacci(N,Result,Count) :-
   Count < N,
   !,
   Count1 is Count + 1,
   Result1 is  Result + Count,
   fibonacci(N,Result1,Count1).  
fibonacci(N,Count,Count).

但结果不正确,请问是什么问题呢?


在行Result1 is Result + Count您只需添加对变量结果进行计数并添加 0,1,2,...,但在斐波那契中,您需要添加前面的两个,例如 0,1,(1+0=1),(1+1=2),。 ... 我建议这个实现:

fib(0, 0).
fib(1, 1).
fib(N,Result):-fibonacci(N,0,1,Result).

fibonacci(0,N,_,N).
fibonacci(N, Prev1,Prev2,Result):-
   N>0,
   New_Prev2 is Prev1+Prev2,
   N1 is N-1,
   fibonacci(N1,Prev2,New_Prev2,Result).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Prolog、尾递归中计算斐波那契数列 的相关文章

  • 这里使用尾递归有什么好处?

    我一直在阅读描述如何通过使用尾递归版本来降低快速排序的空间复杂度的文章 但我无法理解这是怎么回事 以下是两个版本 QUICKSORT A p r q PARTITION A p r QUICKSORT A p q 1 QUICKSORT A
  • Prolog 中的分配性检查

    假设我有一个等价关系eq 以及多个二元运算符o 1 o 2 o n 我想找出哪些操作分配给其他操作 假设我有一个可以确定两个表达式是否等价的知识库 一个简单的解决方案是输入所有可能的查询 对于左分配性 eq o 1 Z o 1 X Y o
  • Prolog 时间重叠问题

    假设我有这个知识库 free ann slot time 8 0 time 9 0 free ann slot time 10 0 time 11 0 free bob slot time 7 0 time 8 30 free bob sl
  • 如何提高词法分析效率?

    在解析一个 3 GB 的大文件时DCG https www metalevel at prolog dcg 效率很重要 我的词法分析器的当前版本主要使用 or 谓词 2 http www swi prolog org pldoc doc f
  • Prolog - 递归列表构建

    对于我正在编写的程序 我需要创建一个列表列表 其中包含代表乘积的数字对和两个给定数字的总和 现在我有一个函数 我可以指定将列表添加到列表中的次数 稍后将使用完整功能进行扩展 这是我所拥有的 s1 0 X s1 Q X N is Q 1 mu
  • Python 中的递归、记忆和可变默认参数

    Base 的意思是不只使用lru cache 所有这些都 足够快 我并不是在寻找最快的算法 但时间安排让我感到惊讶 所以我希望我能了解一些有关 Python 如何 工作 的知识 简单循环 尾递归 def fibonacci n a b 0
  • 展平列表

    尝试解决练习 07http www ic unicamp br meidanis courses mc336 2009s2 prolog problemas http www ic unicamp br meidanis courses m
  • 二叉树的 Herbrand 宇宙、Herbrand 基础和 Herbrand 模型(序言)

    什么是二叉树的 Herbrand 宇宙 Herbrand Base 和 Herbrand Model binary tree empty binary tree tree Left Element Right binary tree Lef
  • 如何在 Prolog 中求反

    我是 PROLOG 新手 正处于练习的开始阶段这一页 https sites google com site prologsite prolog course a first glimpse 给定规则parent X Y 和male X 我
  • 如何在 swi-prolog 的 prolog 文件中运行 prolog 查询?

    如果我有一个定义规则的 prolog 文件 并在 Windows 中的 prolog 终端中打开它 它会加载事实 然而 然后它显示 提示我手动输入一些内容 如何将代码添加到文件中 以便它实际上会评估这些特定的语句 就像我输入它们一样 像这样
  • Prolog - 从列表中删除具有相同第一个值的对

    我有这样的对象列表 list obj x y obj x z obj a b obj b c 我想删除那些共享相同第一个值的元素 这样我就可以使用修改后的列表 在这种情况下 最终列表将如下所示 list obj a b obj b c 有人
  • 寻找最大最小值集合

    我正在尝试编写一个 天真的或半天真的 程序 给定一组元素和许多玩家将其划分为这个数量的玩家 并且对于每个这样的划分取最小值 按总和 子集 然后 我想计算所有这些最小除法的最大值 这被称为https en wikipedia org wiki
  • Prolog 同构图

    这里尝试解决同构图问题 作业信息 判断2个无向图是否同构 没有孤立的顶点 顶点数小于30 图的边作为谓词给出 即 e 1 2 f 1 2 我正在尝试使用以下方法 对于每对边 即图 1 和图 2 中的每条边 Try to bind the v
  • 非成员规则在 Prolog 中无法按预期工作

    我正在尝试在 Prolog 中创建一个迷宫程序 其目的是找到一条从迷宫起点到迷宫中心点 m 的路线 迷宫由使用四种颜色之一连接的正方形组成 蓝色 绿色 紫色或橙色 从起点到中心的路线遵循四种颜色的重复图案 我创建了以下代码 link2 A
  • Prolog 匹配 vs miniKanren 统一

    在 Prolog 人工智能编程中 Bratko 在第 58 页说了以下内容 Prolog 中的匹配对应于逻辑中所谓的统一 但是 我们避免使用 统一 这个词 因为出于效率原因 在大多数 Prolog 系统中 匹配的实现方式并不完全对应于统一
  • 求解序言中极其简单的方程:A = B + C?

    我有一个非常简单的方程 我希望能够在序言中求解 A B C 我希望能够编写一个谓词来表达这种关系 它可以处理任何一个未实例化的参数 无需推广到更复杂的关系或方程 myEquation A B C something 我可以使用以下语义进行调
  • iPhone 开发——performSelector:withObject:afterDelay 还是 NSTimer?

    重复方法调用 或消息发送 我猜合适的术语是 x秒 是使用 NSTimer NSTimer 的 ScheduledTimerWithTimeInterval target selector userInfo repeats 还是让该方法在最后
  • Prolog 实现 and/2、or/2、nand/2、nor/2、xor/2 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在序言中实现以下谓词并将它们用于真值表 and 2 or 2 nand 2 nor 2 xor 2 也许有人可以告诉我如何实现和
  • 在 prolog 中读取用户输入的字符串

    我是 Prolog 初学者 我正在使用 swi prolog 刚刚开始使用它 我需要将用户输入字符串拆分到列表中 我尝试了以下代码 但出现错误 指出 在子句正文中完全停止 无法重新定义 2 write Enter the String nl
  • 计算序言中列表的排列

    在 序言艺术 第二版中有一个问题 您应该定义一个谓词 Even permutation Xs Ys 和类似的奇数排列 当您查询时 例如 Even permutation 1 2 3 2 3 1 和 odd permutation 1 2 3

随机推荐

  • JSF 2 全局异常处理,导航到错误页面未发生

    我正在开发一个基于 JSF 2 0 的 Web 应用程序 我正在尝试实现一个全局异常处理程序 每当发生任何异常 例如 NullPointerException ServletException ViewExpiredException 等
  • Java HTTPS客户端证书认证

    我对HTTPS SSL TLS我对客户在使用证书进行身份验证时到底应该提供什么内容感到有点困惑 我正在编写一个 Java 客户端 需要执行一个简单的操作POST数据到特定的URL 这部分工作正常 唯一的问题是它应该重新完成HTTPS The
  • Matlab,如何获取imagesc生成的结果?

    我读过一些类似的文章 但它们不是我想要的 得到imagesc之后的矩阵 https stackoverflow com questions 14364239 get the matrix after imagesc 14364434 143
  • 避免实现接口中存在的方法 - java

    我有一个如下所示的界面 public interface a public void m1 public void m2 public void m3 public class A implements a public void m3 i
  • SBT 中的 :、:: 和 / 有什么区别?

    我试图回忆是否是test compile test compile or test compile当我在 SBT 上做一些事情时 我突然意识到 虽然我对使用哪个分隔符做什么有一些直觉 但我对每个分隔符的用途并不清楚 因此 当在 sbt 控制
  • 使用 jQuery 将播放/暂停/结束功能绑定到 HTML5 视频

    我正在尝试绑定play pause and ended使用 jQuery 的事件但有一个问题 当我右键单击视频并选择播放或暂停时 图标会正确更改 当我单击播放按钮时 它会更改为暂停 但如果我单击暂停按钮继续播放视频 它不会更改为再次播放 谁
  • 为什么数组前需要加星号?

    我不知道这是哈希问题还是数组问题 但我不明白为什么第三个示例中需要星号 才能获得填充数据的哈希 如果没有它 它会输出一个空的哈希值 coding utf 8 require pp pp first name Shane last name
  • JavaFX 虚拟键盘不显示

    我是javafx新手 我制作了一个简单的应用程序表单 它有 锚定窗格 Pane 文本域 我在触摸屏设备上运行该应用程序 但虚拟键盘不显示 文本字段已经聚焦 我使用的是 JDK 8u25 场景生成器 2 0 根据我读到的 http docs
  • 增加 SQL 命令的命令超时

    我有一个小问题 希望有人能给我一些建议 我正在运行一个 SQL 命令 但由于数据量很大 该命令似乎需要大约 2 分钟才能返回数据 但默认的连接时间是 30 秒 我如何增加这个时间 并将其应用到这个命令 public static DataT
  • 如何保留操作/标题栏但隐藏通知栏

    如何保留操作 标题栏但隐藏通知栏 这个问题看起来已经得到了回答 但我发现的大多数答案都隐藏了操作栏和通知栏 我希望能够保留操作 标题栏 我得到的最好的方法是隐藏两者并使用线性布局来显示自定义操作 标题栏 但我想要一个系统生成的 另外 是否可
  • 是否可以用 R 编写音乐并播放? (Mac OS X)[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想知道是否有一种方法可以用 r 编写脚本来创作音乐 就像编码程序 SuperCollider 或编码
  • 求解序言中极其简单的方程:A = B + C?

    我有一个非常简单的方程 我希望能够在序言中求解 A B C 我希望能够编写一个谓词来表达这种关系 它可以处理任何一个未实例化的参数 无需推广到更复杂的关系或方程 myEquation A B C something 我可以使用以下语义进行调
  • C# 中的多个 SQL 查询将变量作为列返回

    我正在开展一个创建注册系统的学校项目 我选择的数据库方法是使用 T SQL 因为它是我已经熟悉的东西 我正在使用下面的代码来查询数据库 public void button3 Click object sender EventArgs e
  • Python:在 Plotly 中的图形上方创建注释空间

    我想在图中创建额外的注释空间 请参阅附图中的绿色区域 目前 y 轴定义了绘图的高度 我可以将绘图推到超出 y max 限制 在某个点 在图像中标记为红色 之后隐藏 y 轴吗 我尝试避免轴到达 评论部分 绿色 谢谢你 在此输入图像描述 htt
  • Parsec-Parser 工作正常,但是可以做得更好吗?

    我尝试这样做 解析以下形式的文本 一些文本 0 0 0 一些文本 0 0 0 0 0 0 更多文本 0 0 0 进入一些数据结构的列表 内部 一些文本 外部 0 0 0 内部 一些文本 外部 0 0 0 外部 0 0 0 内部 更多文本 外
  • 用C#排列桌面图标

    好吧 伙计们 这就是我想要实现的目标 我希望所有无序的桌面图标在单击按钮时都排列在桌面的左上角 这是我正在使用的代码 DllImport user32 dll private static extern IntPtr GetDesktopW
  • jQuery UI 选项卡 - 如果相应的内容面板为空,如何删除选项卡列表项?

    我正在使用 cms 系统的基本 jQuery UI 选项卡设置 我想知道如果具有相应 id 的内容面板为空 是否可以隐藏导航选项卡 HTML div ul li a href tabs 1 Nunc tincidunt a li li a
  • Active Admin:如何设置页面标题?

    这看起来应该相对简单 但我在寻找答案时遇到了一些麻烦 如何在 ActiveAdmin 中设置页面标题 合并答案并添加一点 这大部分都在维基百科上的这个页面 https github com gregbell active admin wik
  • 在 Win7 上捆绑 Meteor 应用程序时出现 ENOTEMPTY 和 EPERM 异常? :(

    Help 我已经使用 Meteor 工作了大约两个月了 在我的 OSX 家庭环境中一切都进展顺利 但我最近将其中一些代码带入了工作中的 Windows 7 环境中 而 Meteor 在 Windows 上的行为却有所不同 具体来说 代码捆绑
  • 在 Prolog、尾递归中计算斐波那契数列

    我想在 Prolog 中以递归尾部模式计算斐波那契数列 fibonacci 0 0 fibonacci 1 1 fibonacci N Result fibonacci N 1 0 fibonacci N Result Count Coun