接上一篇关于递归的用法
一道小学三年级的题目把我困住了
,再贴一下案件精灵的实现代码,如下:
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异曲同工。
有没有觉得很神奇呀,正反都能用,递归是不是有点流氓哎。
不过话说回来,递归虽然思路简单,但它使用起来不怎么高效,毕竟要一层层反复调用,效率不高,写代码不能局限于此。
好啦,今天的分享就到这里,希望对大家有所启发。
领取专属 10元无门槛券
私享最新 技术干货