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

关于递归的另类用法

接上一篇关于递归的用法

一道小学三年级的题目把我困住了

,再贴一下案件精灵的实现代码,如下:

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

deffinprint(n,i=1):

ifi>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异曲同工。

有没有觉得很神奇呀,正反都能用,递归是不是有点流氓哎。

不过话说回来,递归虽然思路简单,但它使用起来不怎么高效,毕竟要一层层反复调用,效率不高,写代码不能局限于此。

好啦,今天的分享就到这里,希望对大家有所启发。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181228G004DC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券