专栏首页奔跑的键盘侠关于递归的另类用法

关于递归的另类用法

接上一篇关于递归的用法一道小学三年级的题目把我困住了,再贴一下案件精灵的实现代码,如下:

Function print(n) 
    If n = 1 Then 
        TracePrint "a"
    Else
        print (n - 2)
        b=""
        For n
            b = b & "a"
        Next
        TracePrint b
    End If
End Function
Call print(5)

想半天,红色部分输出n个字母a没想出更简单的思路,就先酱紫吧。有考虑过join方法,比如定义一个数组array(5),用join(array,"a")可以直接输出5个a,可是数组维数又不能用变量来定义,这条路貌似走不通。

调试结果就不贴了,感兴趣的可以自行试验。

上篇帖子是倒着递归,直接从末项n一直调用至初值1结束。帖子发给小伙伴看,小伙伴竟然提出了一个令我很惊奇的调用方式,从第一项开始调用一直到末行,感觉有点反科学呢。后来改用python写了一下,代码分享给大家:

#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
#__author__:  Ed Frey
#Date: 18/12/27

def finprint(n,i=1):
    if i>n:
        return True
    else:
        print("a"*i)
        i+=2
        finprint(n,i)

if __name__ == '__main__':

    finprint(5)
    稍微解释一下,初值i=1,运行起来,先走else,其中i递增,从1,到3,再到5,而前面一句print就是输出相应个数的a。
    至于if,也就是当i递归到大于参数n的值5时,运行结束返回True,亦即i小于等于5时,就一直运行else,依次输出1,3,5个a。
    
    这里用到了2个参数,n和i,其中i还有一个初始值,而在不断的递归调用时,n一直保持不变,而i依次加2,跟上一篇帖子中的调用n-2异曲同工。
    有没有觉得很神奇呀,正反都能用,递归是不是有点流氓哎。
    不过话说回来,递归虽然思路简单,但它使用起来不怎么高效,毕竟要一层层反复调用,效率不高,写代码不能局限于此。
    
    好啦,今天的分享就到这里,希望对大家有所启发。

本文分享自微信公众号 - 奔跑的键盘侠(runningkeyboardhero),作者:我是奔跑的键盘侠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-12-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python—字符串常用的格式化方法

    其实如果要通读字符串的所有方法,只需要在pycharm中输入st.就会自动弹出字符串的方法列表,挨个试过去就知道了

    Ed_Frey
  • Python——量化分析常用命令介绍(四)

    上节课提到的MongoDB,其实安装很简单的,前几天下载页面打不开,无形中放大了心里阴影面积

    Ed_Frey
  • 按键精灵——如何实现办公自由(一)

    最近精力有些涣散,很想写点干货又不知从何说起。思来想去,我准备把我使用N久的部分自动办公脚本做下分享,虽然代码不会原封不动的分享,但是整体的设计思路、实现方法(...

    Ed_Frey
  • python技巧分享(十二)

    songleo
  • Python之路(二)Python基础

    计算机从本质上来说只认识二进制中的0和1,可以说任何数据在计算机中实际的物理表现形式也就是0和1,所有的信息最终都表示为一个二进制的字符串,每一个二进制位(bi...

    py3study
  • 学习笔记-小甲鱼Python3学习第三十

    python中else不仅可以与if搭配组成控制流,还可以与while或for搭配使用

    py3study
  • 习题7:更多打印

    Mary had a little lamb. Its fleece was white as snow. And everywhere that Mary w...

    py3study
  • numpy科学计算包的使用2

    利用数组进行数据处理 NumPy数组使你可以将许多种数据处理任务表述为简洁的数组表达式(否则需要编写循环)。用数组表达式代替循环的做法,通常被称为矢量化。 矢...

    听城
  • Python super().__init__和Base.__init__的区别

    我们在使用python中的类继承时,子类继承父类后,在重载父类的方法后,在方法中如果要执行父类对应的方法,一般有两种方式:super和Base(表示父类名)。

    星星在线
  • Python基础一

    changxin7

扫码关注云+社区

领取腾讯云代金券