L语言包含以下说明:
V <- V
V <- V+-1
IF V != 0 GOTO L, where each instruction may or may not have the label [L]
如何在L?
中编写阶乘函数答案 0 :(得分:0)
在下文中,我假设您能够使用return语句编写函数。否则,您可以内联所有函数并为局部变量使用新变量,并为结果使用新变量。返回应该在函数体之后引起一个新的分支。换句话说,我使用函数/返回语法来降低复杂性,而不是因为它为语言增加了任何力量。
有人可能反对我得到像递归等等,但我没有使用它;循环由GOTO完成。根据第二个参数的符号,可以将Subtact / Add函数组合成一个,所以我认为每个函数调用另一个都没有坏处。将这些结合起来,并且通常删除函数/返回语法,留作练习。
(1)写一个符号函数;如果为0则返回0,如果为正则返回1,如果为负则返回-1。
Sign(X)
1. Y <- X
2. Z <- X
3. if Y=0 GOTO 8
4. if Z=0 GOTO 10
5. Y <- Y + 1
6. Z <- Z - 1
7. if 0=0 GOTO 3
8. if Z=0 GOTO 11
9. return -1
10. return +1
11. return 0
(2)写加法和减法函数。
Add(X, Y)
1. Sx = Sign(X)
2. Sy = Sign(Y)
3. if Sx=0 GOTO 13
4. if Sy=0 GOTO 14
5. SyP <- Sy + 1
6. if SyP=0 GOTO 15
7. Z <- Y
8. R <- X
9. R <- R + 1
10. Z <- Z - 1
11. if Z=0 GOTO 16
12. if 0=0 GOTO 9
13. return Y
14. return X
15. R <- Subtract(X, Y)
16. return R
同样用于减法。
(3)写一个乘法函数。
Multiply(X, Y)
1. Sy = Sign(y)
2. if Sy=0 GOTO 18
3. SyP = Sy + 1
4. if SyP=0 GOTO 12
5. C <- Y
6. R <- 0
7. C <- C - 1
8. R <- Add(R, X)
9. if C=0 GOTO 11
10. if 0=0 GOTO 7
11. return R
12. C <- Y
13. R <- 0
14. C <- C + 1
15. R <- Subtract(R, X)
16. if C=0 GOTO 11
17. if 0=0 GOTO 14
18. return 0
(4)写出阶乘函数。
Factorial(X)
1. Sx = Sign(X)
2. if Sx=0 GOTO 11
3. SxP = Sx + 1
4. if Sx=0 GOTO 11
5. R <- 1
6. C <- X
7. R <- Multiply(R, C)
8. C <- C - 1
9. if C=0 GOTO 12
10. if 0=0 GOTO 7
11. return 1
12. return R
你可能需要按摩这些来严格按照你的L制定,但这些想法是合理的(我引入的模数愚蠢的错误,第一次用这种语言写作)。