编写生成递增除数列表的主包装函数与递归辅助函数
生成递增顺序除数的Scheme函数实现
需要实现主函数divisors和递归辅助函数divisors-from,生成某个自然数的所有除数并按递增顺序排列,例如调用(divisors 28)应返回(list 1 2 4 7 14 28)。
实现逻辑
辅助函数divisors-from的作用是从指定数字k开始,筛选出n的所有大于等于k的除数,核心递归逻辑如下:
- 基线条件:当
k大于n时,返回空列表,没有更多除数需要检查 - 递归条件:
- 如果
k能整除n(通过modulo函数判断余数是否为0),则将k加入结果列表,再递归调用divisors-from检查下一个数k+1 - 如果
k不能整除n,直接递归调用divisors-from检查下一个数k+1
- 如果
完整代码
;; divisors-from: Nat Nat -> (listof Nat) ;; 从k开始,返回n的所有大于等于k的除数,按递增顺序排列 (define (divisors-from k n) (cond [(> k n) '()] [(zero? (modulo n k)) (cons k (divisors-from (+ k 1) n))] [else (divisors-from (+ k 1) n)])) ;; divisors: Nat -> (listof Nat) ;; 返回n的所有除数,按递增顺序排列 (define (divisors n) (divisors-from 1 n))
测试验证
调用(divisors 28),会返回(1 2 4 7 14 28),完全符合要求。
内容的提问来源于stack exchange,提问作者Maya_H12
相关产品推荐
相关产品推荐

