- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
(defun sum (n)
(if (n<0) 0 n-1) ;; if n<0, add 0. Else add the next smallest.
(sum (n-1)))
到目前为止,我得出了类似的结果,但我不确定如何声明一个变量来存储我想要返回的总和。
最佳答案
请注意,您正在实现 1+2+...+m对于 m = n-1,它有一个简单的公式:
(lambda (n)
;; You could inject n-1 on the formula to get n.(n-1)/2
;; (like in Vatine's answer), but here I just decrement
;; the input to show how to modify the local variable
;; and reuse the formula linked above to sum up-to m.
(decf n)
(if (minusp n)
0
(/ (* n (1+ n)) 2)))
迭代版本也可以,在做简单循环时不需要递归:
(lambda (n) (loop :for x :below n :sum x))
关于您的代码:
空间很重要1:n<0
被读取为名称“N<0”的符号(默认大写)。 n-1
也是如此这是一个名为“N-1”的符号。
(n<0)
将尝试运行名为 n<0
的函数. (n-1)
也是如此.
(minusp n)
或 (< n 0)
.(1- n)
或 (- n 1)
.如果你写的是正确的,像这样:
(defun sum (n)
(if (< n 0) 0 (- n 1))
(sum (- n 1)))
...仍然会有问题:
您期待您的 (n-1)
实际减少 n
但这里是if
只计算一个值而不产生副作用。
您无条件调用(sum (n-1))
,这意味着:无限递归。前面的 if
返回的值总是被忽略。
1:有关详细信息,请查看组成 和终止 字符:2.1.4 Character Syntax Types
关于lisp - 对小于 n 的正数求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35288042/
所以我目前正在代码 war 中解决以下问题: 返回一个数组,其中第一个元素是正数的计数,第二个元素是负数的总和。如果输入数组为空或 null,则返回一个空数组。 我想出了下面的代码,它并不漂亮,但我知
我想禁用文本框中的字母,这就是我使用此表达式的原因: /^[0-9]*$/ 问题是我也想允许负数, 这个表达式不允许我使用减号。(-)..我该怎么办? 最佳答案 尝试使用以下正则表达式: /^-?[0
这是一道面试题。我们有一个正整数数组,我们必须重新排列和连接数组元素,以便生成的数字是可以使用此数组形成的最大数字。 例如: [884 88] -> 88884 [20 19 90] -> 90201
所以我有点无奈。我想我了解如何对 IEEE-754 数字进行加法,但我在减法方面遇到了很大的问题。我感觉我的想法是对的,但我想和大家确认一下。 因此我们有以下两个 IEEE-754 编号: x: 0
我想将一个正数转换成相应的数字列表——数字也应该是整数。 转换时,比如1024,应该返回[1,0,2,4] 最佳答案 在 Swift 4.1 或更高版本中 let number = 1024 let
如果 float 可以用来正确表示我将使用的参数范围,我正在尝试为我的音频应用程序弄清楚。 它需要的“最大”掩码用于频率参数,它是正的,并且允许最多两位数字作为尾数(即从 20.00 hz 到 220
我是一名优秀的程序员,十分优秀!