【SICP练习】9 练习1.15

本文探讨了在Edwin环境中使用递归函数sine实现正弦角计算的过程,通过Trace功能详细展示了递归调用的步骤,揭示了递归函数的时间和空间复杂度特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



(define(cube x) (* x x x))

(define(p x) (- (* 3 x) (* 4 (cube x))))

(define(sine angle)

   (if (not (> (abs angle) 0.1))

       angle

       (p (sine (/ angle 3.0)))))

大家自己将题目中的代码写入Edwin中,用trace可以追踪p的调用,这种功能在Visual Studio中都有,我也是最近才知道trace的。

(trace-entryp)

;Unspecifiedreturn value

(sine12.15)

[Entering#[compound-procedure 12 p]

   Args: 4.9999999999999996e-2]

[Entering#[compound-procedure 12 p]

   Args: .1495]

[Entering#[compound-procedure 12 p]

   Args: .4351345505]

[Entering#[compound-procedure 12 p]

   Args: .9758465331678772]

[Entering#[compound-procedure 12 p]

   Args: -.7895631144708228]

;Value:-.39980345741334

由此看来p一共运行了5次。

 

大家应该都看出来了sine过程是一个递归,因此它的时间和空间复杂度都是O(loga)。每当题目中传入的参数a乘以3时,p的运行次数就会增加一次。大家可以用trace愉快的测试了。

版权声明:本文为 NoMasp柯于旺 原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.youkuaiyun.com/nomasp

转载于:https://my.oschina.net/nomasp/blog/503508

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值