109、模运算符有哪些用途?
模运算符常用于判断奇偶性、循环索引、时间计算等场景。
110、以下程序的输出是什么?绘制一个栈图,展示程序打印结果时的状态。程序为:定义递归函数recurse,接收参数n和s,若n等于0则打印s,否则递归调用recurse(n - 1, n + s),最后调用recurse(3, 0)。
程序输出为6。
栈图绘制方式:
- 每个函数调用用一个框表示。
- 框外写函数名
recurse,框内写参数n和s的值。
栈帧(从下往上):
- 第一个框 :
n = 0,s = 6 - 第二个框 :
n = 1,s = 5 - 第三个框 :
n = 2,s = 3 - 最上面框 :
n = 3,s = 0
框之间用连线表示调用关系。
111、什么是科赫曲线?并说明绘制长度为x的科赫曲线的步骤。
科赫曲线定义
绘制长度为 $ x $ 的科赫曲线步骤:
- 绘制长度为 $ \frac{x}{3} $ 的科赫曲线;
- 左转 60 度;
- 绘制长度为 $ \frac{x}{3} $ 的科赫曲线;
- 右转 120 度;
- 绘制长度为 $ \frac{x}{3} $ 的科赫曲线;
- 左转 60 度;
- 绘制长度为 $ \frac{x}{3} $ 的科赫曲线。
若 $ x < 5 $,则直接画长度为 $ x $ 的直线。
112、编写一个名为koch的函数,该函数接受参数x并绘制指定长度的科赫曲线。
科赫曲线绘制规则
科赫曲线绘制规则如下:
若 $ x < 5 $,直接绘制长度为 $ x $ 的直线;
若 $ x \geq 5 $,按以下步骤绘制:
- 绘制长度为 $ x/3 $ 的科赫曲线;
- 左转 60 度;
- 绘制长度为 $ x/3 $ 的科赫曲线;
- 右转 120 度;
- 绘制长度为 $ x/3 $ 的科赫曲线;
- 左转 60 度;
- 绘制长度为 $ x/3 $ 的科赫曲线。
Python 实现代码
from jupyturtle import forward, left, right, back
def koch(x):
if x < 5:
forward(x)
else:
koch(x/3)
left(60)
koch(x/3)
right(120)
koch(x/3)
left(60)
koch(x/3)
使用时可调用 make_turtle(delay=0) 和 koch(120) 来绘制科赫曲线。
113、阿克曼函数A(m, n)定义如下:当m = 0时,A(m, n) = n + 1;当m > 0且n = 0时,A(m, n) = A(m - 1, 1);当m > 0且n > 0时,A(m, n) = A(m - 1, A(m, n - 1))。编写一个名为ackermann的函数来计算阿克曼函数。调用ackermann(5, 5)会发生什么?
代码可写为:
def ackermann(m, n):
if m == 0:
return n + 1
elif m > 0 and n == 0:
return ackermann(m - 1, 1)
elif m > 0 and n > 0:
return ackermann(m - 1, ackermann(m, n - 1))
调用 ackermann(5, 5) 时,因阿克曼函数增长极快,可能会导致栈溢出错误或程序运行极长时间。
114、已知函数 uses_any,它接受两个字符串并检查第一个字符串是否使用了第二个字符串中的任何字母。编写函数 uses_all,该函数接受两个字符串并检查第一个字符串是否使用了第二个字符串中的所有字母,允许重复使用字母。
def uses_all(word, required):
for letter in required:
if not uses_any(word, letter):
return False
return True

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



