首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

尝试用lisp递归打印三角形

Lisp是一种函数式编程语言,具有强大的递归能力。通过使用递归,我们可以实现打印三角形的功能。

下面是使用Lisp递归打印三角形的示例代码:

代码语言:txt
复制
(defun print-triangle (n)
  (if (<= n 0)
      nil
      (progn
        (print-line n)
        (print-triangle (- n 1)))))

(defun print-line (n)
  (if (<= n 0)
      nil
      (progn
        (format t "* ")
        (print-line (- n 1)))))

(print-triangle 5)

上述代码中,我们定义了两个函数:print-triangleprint-lineprint-triangle函数用于打印三角形,接受一个参数n表示三角形的高度。print-line函数用于打印每一行的星号。

print-triangle函数中,我们首先判断n是否小于等于0,如果是,则递归结束。否则,我们先调用print-line函数打印当前行的星号,然后递归调用print-triangle函数打印下一行。

print-line函数中,我们首先判断n是否小于等于0,如果是,则递归结束。否则,我们使用format函数打印一个星号,并递归调用print-line函数打印下一个星号。

通过调用(print-triangle 5),我们可以打印一个高度为5的三角形。

这种递归打印三角形的方法可以应用于各种编程语言中,不仅限于Lisp。对于其他编程语言,只需将代码进行相应的语法转换即可实现相同的功能。

腾讯云相关产品和产品介绍链接地址:

请注意,以上产品仅为示例,实际选择产品时应根据具体需求进行评估和选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

各种编程语言对尾递归的支持

/a.out 10000000000   一会儿之后,程序打印出 10000000000 is even   以上可以证明,gcc/clang对于尾递归优化支持的挺好。...Common Lisp   测完Scheme,再来测Scheme的本家兄弟,另外一种Lisp——Common Lisp   先用Common Lisp实现add,因为Common Lisp将数据和过程用不同的命名空间...RESET   因为没有尾递归优化的规定,所以对于那种无限循环,Common Lisp只能选择迭代才能保证不崩栈,比如使用do。...但是似乎也改变了Lisp的味道,do显然此处只能在设计编译器、解释器的时候就得单独实现,虽然按理Lisp下这些都应该是宏,但是无论用宏如何将函数式编程映射为显示的迭代,因为尾clisp递归优化不支持,则无法和系统提供的...看来,至少参考了Scheme的尾递归优化。 Ruby   Ruby的作者松本行弘也是Lisp的粉丝,当然,我想大多数编程语言的作者都会是Lisp的粉丝,因为它会给人很多启发。

2.7K20

Python 实现数字三角形排列详解:Java 视角下的实现与分析

num 用于记录当前要打印的数字,每打印一个数字后递增。print() 用于在每行结束后换行。2. Java 实现数字三角形排列在 Java 中,可以使用类似的逻辑,通过嵌套循环实现数字的三角形排列。...测试用例为了验证数字三角形的排列实现,需要编写测试用例来检查输出结果。...执行打印函数:调用 TrianglePattern.printTriangle 方法,打印一个三角形图案。获取预期输出结果:定义一个包含预期输出结果的字符串。...总结:这个程序的目的是测试打印三角形图案的功能是否正确。通过重定向标准输出流,执行打印方法,并验证输出内容是否符合预期,测试确认了打印三角形图案的功能。...我们通过嵌套循环和条件控制,成功实现了数字的三角形排列,并通过案例展示了如何拓展到其他排列形式,如数字金字塔。本文的测试用例进一步验证了算法的正确性。

12421
  • 2017最受欢迎人工智能编程语言:Python第一,R并未上榜

    AI开发者重视其预设计的搜索机制,非确定性,回溯机制,递归性质,高级抽象和模式匹配。 Prolog非常适合涉及结构化对象及其关系的问题。...例如,在Prolog中,更容易表达对象之间的空间关系,比如表达“绿色的三角形在蓝色的后面”。说明一般规则也很简单,例如表达“对象A比对象B更靠近人,而B比C更近,则A应该比C更近”。...虽然近年来Lisp没有被很多人使用,但该语言既灵活又具有可扩展性。 Lisp最初是针对Lambda演算开发的,诞生以来发生了很多演变。...该语言在计算机科学中引入了许多想法,如递归,动态类型,高级函数,自动内存管理,自主(self hosting)编译器和树结构(tree data structure)。...Lisp用于开发人工智能软件,因为它支持使用符号计算的程序的实现。符号表达和计算是Lisp擅长的。

    2.4K60

    深入理解函数式编程(下)

    又比如,三角形可以被代数表示,也可以用几何表示、向量表示,从代数表示到几何表示的运算就可以视为三角形范畴的一种态射。 总之,对象描述了一个范畴中的元素,而态射描述了针对这些元素的操作。...比如一个三角形有三个顶点A/B/C,那么我们可以表示一个三角形为ABC或者ACB,三角形还是这个三角形,但是从ABC到ACB一定是经过了某种变换。...这就像范畴论,三角形的表示是范畴对象,而一个三角形的表示变换到另一个形式,就是范畴的态射。而我们说这些三角形表示方式的集合为一个群。...现在,如果我们有一个单子叫IO,并且它有如下表现: 我们把这种类型的Monad称为IO,我们在IO中处理打印(副作用)。...可能的调用栈溢出问题 惰性计算在一些电脑或特种程序架构上可能有函数调用栈错误(超长调用链、超长递归),另外许多函数式编程语言需要编译器支持尾递归优化(优化为循环迭代)以得到更好的性能。

    48410

    深入理解函数式编程(下)

    又比如,三角形可以被代数表示,也可以用几何表示、向量表示,从代数表示到几何表示的运算就可以视为三角形范畴的一种态射。 总之,对象描述了一个范畴中的元素,而态射描述了针对这些元素的操作。...比如一个三角形有三个顶点A/B/C,那么我们可以表示一个三角形为ABC或者ACB,三角形还是这个三角形,但是从ABC到ACB一定是经过了某种变换。...这就像范畴论,三角形的表示是范畴对象,而一个三角形的表示变换到另一个形式,就是范畴的态射。而我们说这些三角形表示方式的集合为一个群。...现在,如果我们有一个单子叫IO,并且它有如下表现: 图 64 我们把这种类型的Monad称为IO,我们在IO中处理打印(副作用)。...可能的调用栈溢出问题 惰性计算在一些电脑或特种程序架构上可能有函数调用栈错误(超长调用链、超长递归),另外许多函数式编程语言需要编译器支持尾递归优化(优化为循环迭代)以得到更好的性能。

    95330

    软件测试 黑盒_软件测试黑盒测试报告

    1、 确定规则的个数,先定义条件个数,如下: 三角形按照边分为:等腰三角形、等边三角形、一般三角形 根据分析,确定条件如下: a<b+c、b<a+c、c<a+b、a=b、b=c、c=a,故规则的个数有...T01 4 1 2 非三角形 T02 1 4 2 非三角形 T03 1 2 4 非三角形 T04 3 4 6 一般三角形 T05 3 4 3 等腰三角形 T06 4 3 3 等腰三角形 T07 3 3...6、编写非法测试用例 3.6.4、具体实例 打印机初始处于就绪的状态下,可以接收打印的任务,进入打印状态,开始打印;在打印的过程中,如果打印机出现故障,打印机将处于故障状态,等待修复故障...;故障修复后,打印机恢复打印状态,继续打印原来的文档;在打印过程中,如果纸张用完,打印机将暂停打印,处于缺纸状态,当放入印纸后,打印机会自动检测,恢复打印状态,继续开始打印打印任务完成,打印机恢复就绪状态...—打印 就绪—打印—故障—打印 就绪—打印—就绪 6、根据测试路径编写测试用例 7、添加非法的测试用例 比如直接就绪状态—-故障状态或者

    2.5K10

    Linux之ack命令

    回复【1001】获取 linux常用命令速查手册 ack是比grep好用的文本搜索工具 ack命令安装 > yum install -y ack 命令特点 默认搜索当前工作目录 默认递归搜索子目录 忽略元数据目录...,比如.svn,.git,CSV等目录 忽略二进制文件(比如pdf,image,coredumps)和备份文件(比如foo~,*.swp) 在搜索结果中打印行号,有助于找到目标代码 能搜索特定文件类型(...-h, 不显示名称 -v, 显示不匹配 在当前目录递归搜索单词”eat”,不匹配类似于”feature”或”eating”的字符串: > ack -w eat 搜索有特殊字符的字符串’$path=.’...jsp .jspx .jspf .jhtm .jhtml --[no]kotlin .kt .kts --[no]less .less --[no]lisp....lisp .lsp --[no]lua .lua; first line matches /^#!.

    1.2K00

    由字符串反转(使用递归)引申出来一道Java面试题

    (Recursion): 之后要求应聘者在反转的问题上写一个递归的方案(这至少是漂亮的,但至少可用) ?...有些开发人员在脑海中想不到处理递归,或者需要时间和一些提示。那些不能处理递归的很有可能对于复杂的问题没法完成。...你可以问他们关于递归方案的效率,询问尾(Tail)递归,询问 “+”操作的效率,如何处理,关于为什么String都是不可变的(至少在大多时候这么问),反转“Stephan”时,问候选者有多少个字符串对象创建...在讨论中,开发者说“Easy”,他在整个大学都在用Lisp语言,之前我还不知道,现在听起来真是个极好的消息。你还可以询问在上面代码结束递归的停止条件。...这是一个开放性的领域,你可以要求候选者写一个JUnit 测试它的反转方法,这样不仅可以展现他写测试单元的能力,而且作为测试用例,他所考虑的条件(“”,null,”A”,奇数长度的字符串,偶数长度的字符串

    42620

    由字符串反转(使用递归)引申出来一道Java面试题

    (Recursion): 之后要求应聘者在反转的问题上写一个递归的方案(这至少是漂亮的,但至少可用) ?...有些开发人员在脑海中想不到处理递归,或者需要时间和一些提示。那些不能处理递归的很有可能对于复杂的问题没法完成。...你可以问他们关于递归方案的效率,询问尾(Tail)递归,询问 “+”操作的效率,如何处理,关于为什么String都是不可变的(至少在大多时候这么问),反转“Stephan”时,问候选者有多少个字符串对象创建...在讨论中,开发者说“Easy”,他在整个大学都在用Lisp语言,之前我还不知道,现在听起来真是个极好的消息。你还可以询问在上面代码结束递归的停止条件。...这是一个开放性的领域,你可以要求候选者写一个JUnit 测试它的反转方法,这样不仅可以展现他写测试单元的能力,而且作为测试用例,他所考虑的条件(“”,null,”A”,奇数长度的字符串,偶数长度的字符串

    50710

    来来来,咱们元编程入个门

    那么本文就干一些,尝试用粗浅的语言对 metaprogramming / macro 做个小小的入门,主要是讲清楚一些概念和思想。文字代码一起上,酒干倘卖无。...lisp(以下谈到的 lisp,皆为其方言 clojure)是一门直接把类似 AST 的语法暴露给程序员的语言。因此,它的语法看起来会非常别扭: ?...而 elixir 虽不是 lisp 族的语言,语法和 lisp 截然不同,但它也从语言设计之初,就考虑把语法树暴露给程序员: ?...这个例子实现了 unless 的功能,但其主要目的是打印 macro 的输入输出: ?...我们把之前 unless 的例子稍微修改一下,加一句打印: ? 为了能让结果更加清晰,我们写一个 compare 函数,然后使用 unless: ? 我们可以看到,函数被执行了两遍。

    946100

    Python升级之路( Lv5 ) 函数

    递归函数 递归(recursion)是一种常见的算法思路,在很多算法中都会用到. 比如:深度优先搜索(DFS:Depth First Search)等. 递归的基本思想就是“自己调用自己”....每个递归函数必须包含两个部分: 终止条件: 表示递归什么时候结束. 一般用于返回值,不再调用自己 递归步骤: 把第n步的值和第n-1步相关联。...递归函数由于会创建大量的函数对象、过量的消耗内存和运算能力....编写一个函数,计算下面的数列: 输入三角形三个顶点的坐标,若有效则计算三角形的面积;如坐 标无效,则给出提示 输入一个毫秒数,将该数字换算成小时数,分钟数、秒数 使用海龟绘图。...解题代码: # 输入三角形三个顶点的坐标,若有效则计算三角形的面积;如坐标无效,则给出提示 import math def isvalid(a=0.0, b=0.0, c=0.0): ""

    1.2K10

    python每日一练(5)

    海伦公式是利用三角形的三条边的边长直接求三角形面积的公式 # 海伦公式求三角形面积 # 海伦公式是利用三角形的三条边的边长直接求三角形面积的公式 #p = (a + b + c...例如,要将数字3.1415926保留2位小数并打印出来,可以使用以下代码: num = 3.1415926 print("%.2f" % num) 输出结果为: 3.14 其中,%.2f中的.2表示保留...print(fib(6)) 注意: 这种递归算法的时间复杂度为 O(2^n),因为每个数都要递归地计算出它的前两个数的和。...方法2-非递归 #非递归 n = 6 fib = [1,1] for i in range (2,n+1): fib.append(fib[i-1]+fib[i-2]) #打印整个列表 print...(fib) #利用索引单独打印第六个元素 print(fib[n-1]) 索引 在Python中,列表索引指的是列表中每个元素的位置。

    18910

    python练习题参考答案来啦(2)

    输入倒三角形的大小,输出字符倒三角形(数字不定) 7.输出字符三角形 输出字符三角形,效果如下: 每行字符数量按照 1,3,5,7的规律 同上,会更加灵活一些,难度也略高一些。...# for循环嵌套:输入倒三角形的大小,输出字符倒三角形 n=int(input(" 请输入一个数字:")) for i in range(n): for j in range(n):...若为正三角,则j>i print(' ',end='') else: print('*',end='') print() # 换行 8.打印斐波那契数列前...#斐波那契的递归函数,n表示数列的第n项 memo={1:1,2:1} def fib2(n): if n not in memo: memo[n]=fib2(n-1)+fib2...title = "黄金" elif score >= 8: title = "王者" else: title = "青铜" print("获得的称号是:", title)# 打印出获得的称号

    84320
    领券