识别编程语言,在

时间:2018-04-28 10:28:53

标签: algorithm programming-languages pseudocode

我刚刚开始学习计算机编程,我想了解更多关于编程算法的知识。我买了一些参考书。但是,当我读这本书时,我发现了一些像这样的代码:

function Get-Number(n)
    Q ← NIL
    Enqueue(Q,1)
    While n > 0 do
        x ← Dequeue(Q)
        Unique-Enqueue(Q,2x)
        Unique-Enqueue(Q,3x)
        Unique-Enqueue(Q,5x)
        n ← n – 1
    return x

function Unique-Enqueue(Q,x)
    i ← 0
    while i < |Q| ^ Q[i] < x do
        i ← i + 1
    if i < |Q| ^ x = Q[i] then
        return
    Insert(Q,i,x)

我已经学习了一些C语言的基础知识,但是我没有看到那种代码,我无法理解算法。有谁知道上述代码是什么类型的编程语言?非常感谢你!

2 个答案:

答案 0 :(得分:1)

我猜这是pseudocode。看起来语法的含义如下:

  • function F(x)声明一个新的功能 F带有一些参数
  • Q <- value 为名为Q的变量指定值,如果该值尚不存在则创建Q
  • someFunction(x) 调用 someFunction,传递参数x
  • while while loop
  • if ... then是一个 if语句,与C中的相同,但语法更像英语
  • return x退出当前函数并返回x作为其返回值,如果未指定返回值则返回值(C术语中的void函数)
  • |Q|生成集合Q
  • 的大小
  • <表示与C和数学相同(小于运算符)
  • Q[i]在位置i
  • 中产生集合Q中的元素
  • ^可能意味着逻辑AND,因为这就是数学中的含义

答案 1 :(得分:1)

简短回答

调用Get-number(n)会返回n th 最小的自然数,只有2,3或5作为素因子。这些数字的列表如下所示:

{1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, ...}

详细说明

完整的代码有两个功能。我将逐一解释每一步。

GET-数(n)

function Get-Number(n)
    Q ← NIL
    Enqueue(Q,1)
    While n > 0 do
        x ← Dequeue(Q)
        Unique-Enqueue(Q,2x)
        Unique-Enqueue(Q,3x)
        Unique-Enqueue(Q,5x)
        n ← n – 1
    return x
  • 创建名为Q的空队列。在下一步中,我们将1推送到Q = [1]
  • 我们取出最右边的数字x。然后分别致电Unique-Enqueue(Q,2x)Unique-Enqueue(Q,3x)Unique-Enqueue(Q,5x)
  • 最后,我们返回x的最终值。因此,我们有效地放弃了函数末尾的队列Q,并仅保留x的最终值。

总的来说,给定一个输入n,此函数将返回一个输出x,该输出可以在完成上述所有函数调用后获得。 现在让我们看看另一个函数。

唯一-排队(Q,X)

function Unique-Enqueue(Q,x)
    i ← 0
    while i < |Q| ^ Q[i] < x do
        i ← i + 1
    if i < |Q| ^ x = Q[i] then
        return
    Insert(Q,i,x)
  • 在当前Q中,继续向右移动,直至找到一个数字 不满足Q[i] < x,即查找队列中从左到右移动的第一个数字,该数字至少与x一样大。
  • 有三种可能的情况。如果此数字等于x,请停止。如果此数字大于x,请在此数字前插入x。如果没有这样的号码,请在末尾插入x

示例案例

我们打电话给Get-number(4)

  • 最初Q = [1]
  • 第一次循环后
  • Q = [2,3,5]
  • 第二次循环后
  • Q = [3,4,5,6,10]
  • 第三次循环后
  • Q = [4,5,6,9,10,15]
  • 第四次循环后
  • Q = [5,6,8,9,10,12,15,20]

因此Get-number(4)会返回4,因为那是我们x的最后一个值。