我已经创建了一个程序,通过使用尾递归返回斐波那契数列,我想将其结果添加到列表中。我做了以下事情:
public async Task<GoogleJsonWebSignature.Payload> wfValidateAsync(string pId_Token)
{
GoogleJsonWebSignature.Payload Sig = await GoogleJsonWebSignature.ValidateAsync(pId_Token, null, false);
return Sig;
}
我希望appendList返回一个包含斐波纳契系列元素的列表,例如我称之为(fib 8)。 有帮助吗? 感谢
答案 0 :(得分:1)
在Lisp中编程时,我们避免使用append
来构建列表 - 它效率很低,因为在最后插入一个元素,我们必须遍历整个列表......然后再次, 然后再次。最好使用cons
以相反的顺序构建列表,并在结尾处反转它。此外,编写尾递归的理想方法是将结果累积到参数中,而不是在外部定义的变量中(无论如何都不会起作用,除非你set!
价值某处)。这就是我的意思:
(define (fib n)
(fibTail 1 0 n '()))
(define (fibTail n1 n2 c lst)
(if (< c 0)
(reverse lst)
(fibTail (+ n1 n2) n1 (- c 1) (cons n2 lst))))
例如:
(fib 10)
=> '(0 1 1 2 3 5 8 13 21 34 55)