前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于递归的另类用法

关于递归的另类用法

作者头像
Ed_Frey
发布2019-07-04 15:13:49
3850
发布2019-07-04 15:13:49
举报
文章被收录于专栏:奔跑的键盘侠奔跑的键盘侠

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

代码语言:javascript
复制
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写了一下,代码分享给大家:

代码语言:javascript
复制
#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
#__author__:  Ed Frey
#Date: 18/12/27

def finprint(n,i=1):
代码语言:javascript
复制
    if i>n:
        return True
    else:
        print("a"*i)
        i+=2
        finprint(n,i)

if __name__ == '__main__':

    finprint(5)
代码语言:javascript
复制
    稍微解释一下,初值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异曲同工。
    有没有觉得很神奇呀,正反都能用,递归是不是有点流氓哎。
    不过话说回来,递归虽然思路简单,但它使用起来不怎么高效,毕竟要一层层反复调用,效率不高,写代码不能局限于此。
    
    好啦,今天的分享就到这里,希望对大家有所启发。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奔跑的键盘侠 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档