<jupyter_start><jupyter_text>SICP 习题 ( 1.17) 解题总结 SICP习题 1.17 是将一个计算加法的过程修改成一个只使用对数计算步数的方法。其实这个习题是对书中对数步数求幂方法的强调，对数步数求幂的方法是将一系列的乘法变成对数步数的求幂。本习题就是要求将一系列的加法变成对数步数的乘法。需要转换的过程如下：<jupyter_code>(define (* a b)
  (if (= b 0)
      0
      (+ a (* a (- b 1)))))<jupyter_output><empty_output><jupyter_text>我们要做的就是对b进行判断，如果是偶数，就将a*b变成(double a*（halve b))如果b是奇数，就将a*b变成 （a + a * (b -1))你会发现这个过程和书上的对数步数求幂几乎一模一样，过程定义如下：<jupyter_code>(define (fast-mul a b)
  (cond ((= b 0) 0)
	((even? b) (double (fast-mul a (halve b ))))
	(else (+ a (fast-mul a (- b 1))))))<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1736111111111111, 'fraction_numerical': 0.022569444444444444, 'mean_word_length': 6.1234567901234565, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '582994', 'license': 'MIT', 'n_tokens_mistral': 393, 'n_tokens_neox': 403, 'n_words': 43, 'path': 'cn/.ipynb_checkpoints/sicp-1-17-checkpoint.ipynb', 'repo_name': 'DamonDeng/sicp_exercise', 'size': '576'}