python-3.x - 可视化递归的扩展和收缩过程
问题描述
我正在练习 SICP 的练习 1.17
#+begin_src ipython :session alinbx :results output
def fast_mul(a, b):
if b == 1: return a
else:
if even(b): return 2 * fast_mul(a, b//2)
if odd(b): return a + 2 * fast_mul(a, b//2)
def even(n):
return n % 2 == 0
def odd(n):
return n % 2 == 1
print(fast_mul(3, 7))
#+end_src
#+RESULTS:
: 21
我怎么能通过添加看到膨胀和收缩的过程print
as
fast_mul(3,7)
3 + 2 * fast_mul(3, 3)
3 + 2 * (3 + 2 * fast_mul(3, 1))
3 + 2 * (3 + 2 * 3)
21
解决方案
听起来您正在寻找trace,尽管默认值可能需要一些黑客攻击才能返回您正在寻找的特定详细信息,例如。
python -m trace -t fast_mul.py
在 elisp 中,默认跟踪更接近您想要的输出,例如。
(defun fast-mul (a b)
(if (eq 1 b) a
(+ (if (evenp b) 0 a) (* 2 (fast-mul a (/ b 2))))))
(trace-function 'fast-mul)
(fast-mul 3 7)
;; 1 -> (fast-mul 3 7)
;; | 2 -> (fast-mul 3 3)
;; | | 3 -> (fast-mul 3 1)
;; | | 3 <- fast-mul: 3
;; | 2 <- fast-mul: 9
;; 1 <- fast-mul: 21
推荐阅读
- css - CSS背景图像不加载
- python - 自动角色事件中未定义名称“角色”
- spring-boot - redisTemplate ValueOperations 增量获取 null
- sql - #
我正在我的 rails 应用程序中构建三个模型。一个模型引用了两次相同的模型,如我的DB Schema<
- for-loop - Lua:在 for 循环中使用计算值的典型方法是什么?
- c - C中文件删除中的可变长度行
- avro - 使用kafka-avro-console-consumer消费spring cloud stream kafka发送的avro消息时出错
- python - 如何仅给定python中的目录名称就获取目录的完整路径
- python - Python np.array 将 x 值放入 x 个 bin,其中每个值由 1 个 bin 表示
- php - Symfony 翻译网站并查看语言列表