gpt4 book ai didi

loops - 方案while循环

转载 作者:太空宇宙 更新时间:2023-11-03 18:43:43 25 4
gpt4 key购买 nike

我在方案语法方面有点新...我正在尝试制作一个简单的程序,您可以在其中输入一个整数,如果该整数是偶数则执行某项操作,如果该整数是奇数则执行其他操作。我能够做到这一部分。现在,我需要做一个循环,我可以在其中递减数字直到它等于 1。这是我的代码:

#lang racket

(define (even? n)
(if (eqv? n 0) #t
(odd? (- n 1))))
(define (odd? n)
(if (eqv? n 0) #f
(even? (- n 1))))

; this is the function that i wanted to be inside the loop
(define (sequence n)
(cond
[(even? n) n( / n 2)]
[(odd? n) n(+(* n 3) 1) ] )

)
(sequence 5)

输出应该是一个数字序列。换句话说,它应该在列表中。

最佳答案

输出列表是通过构造列表中的每个元素然后在输入上推进递归直到输入耗尽(在您的情况下,当数字 n是一个)。通过在列表的头部连续使用元素并以空值结束递归,一个新的适当列表被创建并在过程执行结束时返回。方法如下:

(define (sequence n)
(cond [(= n 1) ; if n=1, it's the exit condition
(list n)] ; return a list with last element
[(even? n) ; if n is even
(cons n (sequence (/ n 2)))] ; cons n and advance the recursion
[(odd? n) ; if n is odd
(cons n (sequence (+ (* n 3) 1)))])) ; cons n and advance the recursion

以上将返回一个包含 Collatz 的列表给定数字 n 的序列:

(sequence 6)
=> '(6 3 10 5 16 8 4 2 1)

附带说明:过程 even?odd? 在 Scheme 中是标准的,您不必重新定义它们。

关于loops - 方案while循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14864396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com