仅使用增量、循环、赋值、零的减法运算

2023-11-26

我正在尝试仅使用以下操作来构建减法、加法、除法、乘法和其他运算:

  1. incr(x) - 一旦调用此函数,它将把 x + 1 赋给 x
  2. allocate(x, y) - 该函数将把 y 的值赋给 x (x = y)
  3. Zero(x) - 该函数将 0 分配给 x (x = 0)
  4. Loop X { } - 括号内写入的操作将被执行 X 次

使用以下规则可以直接实现加法(add),如下所示:

ADD (x, y) {
 loop X {
   y = incr (y)
 }
return y
}

然而,我正在努力实施减法。我认为所有其他需要的操作都可以使用减法来完成。

任何提示将不胜感激。


史蒂芬·科尔·克莱恩设计了一种使用整数加法执行整数减法的方法。但是,它假设您不能有负整数。例如:

0 - 1 = 0
1 - 1 = 0
2 - 1 = 1
3 - 1 = 2
4 - 1 = 3
5 - 2 = 3
6 - 3 = 3
6 - 4 = 2
6 - 5 = 1
6 - 6 = 0
6 - 7 = 0

在您的问题中,您使用增量运算实现了加法运算。

类似地,您可以使用自减运算来实现减法运算,如下所示:

sub(x, y) {
    loop y
        { x = decr(x) }
    return x
}

现在,我们需要做的就是实现减量操作。

这就是克莱恩的天才之处:

decr(x) {
    y = 0
    z = 0

    loop x {
        y = z
        z = incr(z)
    }

    return y
}

这里我们使用了所有四种操作。它是这样工作的:

  1. 我们有两个基本情况,y(基本情况为0) and z(基本情况为1):

    y = 0 - 1 = 0
    z = 1 - 1 = 0
    

    因此,我们将它们都初始化为0.

  2. When x is 0我们运行循环0次(即从不),然后我们只需返回y = 0.

  3. When x is 1然后我们运行一次循环,分配y = z然后简单地返回y = z = 0.

请注意,每次我们运行循环时y保存当前迭代的结果,同时z保存下一次迭代的结果。这就是我们需要两个基本情况的原因。递减函数不是连续函数。它是一个分段的功能:

decr(0)     = 0
decr(n + 1) = n

当克莱恩去看牙医时,牙医拔掉了他的两颗牙齿,他意识到了这一点。他在试图解决这个问题时感到沮丧,当牙医拔掉他的两颗牙齿时,他意识到他需要两个基本情况。

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

仅使用增量、循环、赋值、零的减法运算 的相关文章

  • python sympy计算余弦函数积分时出错

    因此 我直接尝试从 sympy 文档中获取示例 但出现了一个奇怪的错误 我正在使用 python 3 2 和 sympy 0 7 3 我一直在 ipython 笔记本上工作 尽管我认为这不会有什么不同 错误是 每当我创建 x 符号并尝试集成
  • 是否有可能比 O(n log n) 更好地计算数字列表的中位数?

    我知道可以在 O n 中计算数字列表的平均值 但是中位数呢 有没有比排序 O n log n 和查找中间元素 或者如果列表中有偶数个项目则两个中间元素的平均值 更好的算法 是的 您可以在 O n 时间内 确定性地 完成此操作 http ww
  • 有效地将相似的数字分组在一起[重复]

    这个问题在这里已经有答案了 可能的重复 一维数数组聚类 https stackoverflow com questions 11513484 1d number array clustering 我有一个数字数组 例如 1 20 300 4
  • 许可证密钥模式检测? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 这不是真实情况 请忽略您可能认为适用的法律问题 因为它们并不适用 假设我有一组 200 个已知的有效许可证密钥 用于假设的软件许可算法
  • 三次贝塞尔曲线逆 GetPoint 方程:float for Vector <=> Vector for float

    给定结果值和四个点是否可以取回 float t 如果是这样 怎么办 public static Vector3 GetPoint Vector3 p0 Vector3 p1 Vector3 p2 Vector3 p3 float t t M
  • Java中的字符算术

    在玩的过程中 我遇到了一些对我来说似乎很奇怪的事情 以下不是有效的 Java 代码 char x A x x 1 possible loss of precision 因为其中一个操作数是整数 所以另一个操作数被转换为整数 结果无法分配给字
  • Android:如何获取小数点后的两位数?不想截断值

    如何获取小数点后仅两位数的双精度值 例如 如果 a 190253 80846153846 那么结果值应该像 a 190253 80 尝试 我尝试过这个 public static DecimalFormat twoDForm new Dec
  • 在二维平面中找到距离 P 点最近的 K 个点

    资料来源 亚马逊面试问题 解决方案1制作大小为 K 的堆并按最小距离收集点O NLogK 复杂 解决方案2 取大小为 N 的数组并按距离排序 应该使用QuickSort 霍尔修改 取前 K 点作为答案 这太复杂了 NlogN 但可以优化到近
  • 为什么在 Javascript 中添加两位小数会产生错误的结果? [复制]

    这个问题在这里已经有答案了 可能的重复 JavaScript 的数学有问题吗 https stackoverflow com questions 588004 is javascripts math broken 为什么 JS 搞砸了这个简
  • 优雅的折线“左移”测试

    Given X Y 坐标 即车辆的位置 X Y 数组 它们是折线中的顶点 请注意 折线仅由直线段组成 没有圆弧 我想要的是 计算车辆是在折线的左侧还是右侧 当然还是在顶部 我的做法 迭代所有线段 并计算到每个线段的距离 然后 对于最近的段
  • Python:球体的交集

    我对编程非常陌生 但我决定承担一个有趣的项目 因为我最近学会了如何以参数形式表示球体 当三个球体相交时 有两个不同的交点 除非它们仅在一个奇点处重叠 球体的参数表示 我的代码是根据答案修改的Python matplotlib 绘制 3d 立
  • 如何在给定目标大小的情况下在 python 中调整图像大小,同时保留纵横比?

    首先 我觉得这是一个愚蠢的问题 对此感到抱歉 目前 我发现计算最佳缩放因子 目标像素数的最佳宽度和高度 同时保留纵横比 的最准确方法是迭代并选择最佳缩放因子 但是必须有更好的方法来做到这一点 一个例子 import cv2 numpy as
  • C++ 中的矩阵类

    我正在做一些线性代数数学 并且正在寻找一些真正轻量级且易于使用的矩阵类 可以处理不同的维度 基本上是 2x2 2x1 3x1 和 1x2 我认为此类可以使用模板来实现 并在某些情况下使用一些专门化来提高性能 有人知道任何可用的简单实现吗 我
  • C# 中四舍五入到偶数

    我没有看到 Math Round 的预期结果 return Math Round 99 96535789 2 MidpointRounding ToEven returning 99 97 据我了解 MidpointRounding ToE
  • 矩阵向量变换

    我正在编写一个代码来制作软件蒙皮器 骨骼 皮肤动画 并且我正处于 优化 阶段 蒙皮器工作得很好 并且在 Core 上 1 09 毫秒内对 4900 个三角形网格与 22 个骨骼进行蒙皮Duo 2 Ghz 笔记本 我需要知道的是 1 有人可以
  • 小数除以小数并得到零

    为什么当我这样做时 select CAST 1 AS DECIMAL 38 28 CAST 1625625 AS DECIMAL 38 28 我得到 0 吗 但是当我得到 0 时 select CAST 1 AS DECIMAL 20 10
  • 如何将一组重叠范围划分为不重叠范围?

    假设您有一组范围 0 100 一 0 75 b 95 150 c 120 130 d 显然 这些范围在某些点上重叠 您将如何剖析这些范围以生成不重叠范围的列表 同时保留与其原始范围相关的信息 在本例中为范围后面的字母 例如 运行算法后的上述
  • 寻找将集合映射到整数的双射函数

    对于任意两个序列 a b 其中 a a1 a2 an 且 b b1 b2 bn 0a b具有相同的元素 而不关心它们的顺序 例如 如果 a 1 1 2 3 b 2 1 3 1 c 3 2 1 3 则 f a f b f a f b 我知道有
  • 在球体边缘绘制点

    因此 来自 Flash 背景的我对一些简单的 2D 三角函数有很好的理解 在带有 I 圆的二维中 我知道使用给定角度和半径将项目放置在边缘上的数学 x cos a r y sin a r 现在 如果我在 3d 空间中有一个点 我知道球体的半
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount

随机推荐

  • @PathVariable 和 @ModelAttribute 的值重叠

    我有一个User存储在会话中的对象 SessionAttributes 以及一个直接的方法装饰 ModelAttribute以便在会话值为空时初始化它 用户类别 Entity Table name USER public class Use
  • 实现包含其他 Parcelable 的 Parcelable 时出现问题

    我正在实现 Parcelable 类 其中有另一个 Parcelable 在 OuterParcelable 类中 Override public void writeToParcel Parcel dest int flags Bundl
  • UnicodeDecodeError,utf-8 无效的连续字节

    我正在尝试使用该代码从日志文件中提取行 with open fichier 01 as f content f readlines print content 但它总是发出错误声明 Traceback most recent call la
  • Python 子进程 readlines() 挂起

    我尝试完成的任务是流式传输 ruby 文件并打印输出 NOTE 我不想一次打印出所有内容 main py from subprocess import Popen PIPE STDOUT import pty import os file
  • 在 WPF 中比较两个位图图像以检查它们是否不同的最快方法

    比较 2 个 BitmapImage 对象的最快方法是什么 一个位于 图像源 属性中 另一个是我在代码中创建的 我可以使用新的位图图像设置图像源 但它会导致闪烁 因为它会一遍又一遍地设置相同的图像 我只想在图像像素与 Image Sourc
  • ZEND,用数据渲染不同的视图

    我有一个问题 因为我想从不同的控制器渲染视图并传递数据 你知道该怎么做吗 我正在尝试 this gt renderScript index index phtml gt entries result 但我的如果 if count this
  • 当父元素为 display:none 时显示 HTML 子元素

    当父元素为 display none 时 是否有任何机制可以显示子元素 这种情况是隐藏选项卡上的验证错误 我想显示错误消息 即使该字段是隐藏的 这里是一个真正简化的 JSFiddle 情况http jsfiddle net vLYnk Ma
  • 如何在 SBT 中切换项目和库依赖关系?

    在 SBT 中声明托管库依赖关系很容易 例如 libraryDependencies Seq org specs2 specs2 1 12 2 test junit junit 4 7 test 虽然在 SBT 中声明项目依赖关系并不那么容
  • 在 iOS 上同时录制和播放(Phonegap 版本)

    我正在使用 Phonegap Build 版本 3 3 0 开发 iOS 和 Android 应用程序 应用程序的主要焦点是录音 并在后台播放另一个音频 音乐 对于这两种情况 我都使用phonegap媒体api和正确的音频文件进行录制 iO
  • concatMap f xs 和 concat $map f xs 之间的区别?

    想必他们做的是完全相同的事情concatMap f xs and concat map f xs 我为什么要选择其中之一而不是另一个 我想这可能是一种优化 如果是这样 GHC 7 8 仍然是这种情况吗 情况是这样的concatMap f x
  • Skype API 消息输出

    我如何从 Skype 接收消息并将其输出到我的应用程序 textbox1 Text 我在 skype4com 文档中寻找它 但没有找到任何内容 要监听聊天消息 您可以执行以下操作 First make a reference to skyp
  • JSON,替换引号和斜杠,但是用什么替换呢?

    我有一个忘恩负义的任务 就是在 Java 中手动构建 JSON 字符串 没有任何框架 只有一个 StringBuilder 我知道这很糟糕 但这只是原型的一部分 下次我会做得更好 我的问题 我怎样才能把字符串 gt Some text WI
  • 如何使用node-http-proxy进行HTTP到HTTPS的路由?

    这是我正在使用的模块版本 npm list g grep proxy email protected Web 服务调用我的机器 我的任务是根据请求正文的内容使用附加查询参数将请求代理到不同的 url 和主机 var http require
  • Python 3.5 UnicodeDecodeError 对于 utf-8 格式的文件(语言为“ang”,古英语)

    这是我第一次使用 StackOverflow 提问 但多年来你们集体保存了我的许多项目 让我感觉宾至如归 我正在使用 Python3 5 和 nltk 来解析完整的古英语语料库 该语料库以 77 个文本文件和一个 XML 文档的形式发布给我
  • 检查我的提交在 emacs/git 中是否有“import pdb”?

    我承诺import pdb pdb set trace 经常 有什么方便的方法可以阻止我这样做吗 我使用 emacs git magit 为了完整起见 以下是如何检查索引中版本的内容 构建尤金的回答并进行了一些更改 未作为完整的钩子进行测试
  • Razor 语法在编译前在视图中给出错误(无智能感知)

    我正在浏览 NuGet 包列表 并且正在更新 bootstrap jQuery 等所有内容 但是当我这样做时 我不假思索地更新了微软 欧文和另一个包 可能是 EF 或其他东西 它是一个主要版本更新 哎呀 我不得不通过删除我的项目 从源代码控
  • 如何将默认 MessageConverter 设置为 JSON 并添加 jackson-dataformat-xml?

    我有一个工作的 Spring Boot 应用程序 它使用 JSON 作为交换数据格式 现在我必须添加一个仅以 xml 形式发送数据的服务 我添加了jackson dataformat xml到我的 pom 效果很好 Service publ
  • 在 blueimp 画廊内添加描述

    我正在使用一个蓝小鬼画廊将灯箱添加到我的图片库 因此 当您单击图像缩略图时 它会启动一个带有较大版本图像等的灯箱 我还想在灯箱的每张幻灯片中添加一些描述性文本和一个按钮 但我无法使其正常工作 它不会显示我添加的占位符描述 这是我到目前为止所
  • 获取函数所需的参数数量

    这是一个延伸问题PHP 将 this 传递给类外的函数 我相信这就是我正在寻找的东西 但它是在 python 中而不是 php 中 以编程方式确定函数所需的参数数量 Python 假设我有一个这样的函数 function client fu
  • 仅使用增量、循环、赋值、零的减法运算

    我正在尝试仅使用以下操作来构建减法 加法 除法 乘法和其他运算 incr x 一旦调用此函数 它将把 x 1 赋给 x allocate x y 该函数将把 y 的值赋给 x x y Zero x 该函数将 0 分配给 x x 0 Loop