python 类中函数递归递归函数 哪个课讲的好

大神讲讲递归生成器,实在是没有看明白。_python吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:130,052贴子:
大神讲讲递归生成器,实在是没有看明白。收藏
这是python基础教程上的一个用来展开序列的例子,我不明白抛出异常后yield element如何得到值的,为什么打印的次数是递归的次数&&& def f(lt):
for sublist in lt:
for element in f(sublist):
print *&&&&&*,element
yield element
except TypeError:
print *-----*,ltyield lt&&& a = [[[1],2],3,4,[5,[6,7]],8]&&& list(f(a))----- 1&&&&& 1&&&&& 1&&&&& 1----- 2&&&&& 2&&&&& 2----- 3&&&&& 3----- 4&&&&& 4----- 5&&&&& 5&&&&& 5----- 6&&&&& 6&&&&& 6&&&&& 6----- 7&&&&& 7&&&&& 7&&&&& 7----- 8&&&&& 8[1, 2, 3, 4, 5, 6, 7, 8]
更好故溪飞雪,小窗深闭。
砍倒了身前大树方知风雨无常
递归生成器。。。做了两年web端表示从来没用过,理解下概念就行,要用的时候现学。
当爱一个人,却无法拥有他时,自己面对着一个选择:放弃还是继续。包括你在内的很多人都说:放弃吧,不要再浪费青春。但是,自己却明白,自己真的放不下。如果能放下,早都已经放下了,根本不会到现在的地步。所以,当黑夜来临的时候,我只能孤独的思念一个人。
#-*-coding:utf8-*- #for python 2.7 from random import randint import sys ((lambda n: (lambda a,b,c=lambda x,y,z: y==n and sys.stdout.write('恭喜你,你猜对了!正是:'+n+'\n') or (y!=n and x==7) and sys.stdout.write('抱歉,你猜错了!正确答案是:'+n+'\n') or x==6 and sys.stdout.write('你还有最后一次机会了!\n') or x==3 and sys.stdout.write('十位数为:'+n[0]+'\n') or x!=7 and z(x+1,raw_input('Input a %s:'%(x+1)),z): c(a,b,c))(1,raw_input('Input a %s:'%1)) )(str(randint(10,99))))
生与死的距离,对于一条狗来说,它无法参透,它只相信,他的主人会回来。
很多人不敢说出他们想要什么,所以他们得不到他们想要的东西。
大神你好,根据你的问题,我做了一个简要分析,给你参考一下,不知道对不对哦,一起交流可以Q我,怕被删帖的我用大写扣扣号:九九六二九八九二九def f(lit):
for sublist in lit: #&---[1,2,3,4,5,6,7,8]
for ele in f(sublist):
print '&&&&&&', ele
except TypeError:
print '--------', lit
yield lita = [1,2,3,4,5,6,7,8]print list(f(a))&&&第一次循环:1、值1被带进sublist2、外层for输出list的值 -------- 13、在外层for中遇到yield,暂停运行,且保持当前状态4、接着进入内层for循环,调用自身f(sublist),sublist的值为1,且被带进ele5、内层循环输出ele的值:&&&&&&16、在内层for中遇到yield,暂停运行,且保持当前状态第二次循环:7、继续运行for循环,将值2带进sublist8、外层for输出list的值 -------- 29、在外层for中遇到yield,暂停运行,且保持当前状态10、接着进入内层for循环,调用自身f(sublist),sublist的值为2,且被带进ele11、内层循环输出ele的值:&&&&&&212、在内层for中遇到yield,暂停运行,且保持当前状态第n次循环:依次类推,直到完成列表中最后一个值的遍历
内置的Debug功能,强到爆炸,这也是为什么我觉得VS Code青出于蓝的原因. 得益于微软强大的VS团队技术支持,VS Code的Debug功能在一般日常用途下已经媲美IDE了.atom和sublimetext的Debug功能在VSCode面前真的只是渣渣. 此外,Debug的时候,会根据你的项目类型(例如是django还是flask还是纯python项目)会自动匹配正确的运行命令.
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或来自集智百科
Fibonacci数列是一个很有趣的结构,每后一项都等于前两项之和。它的前几位如下:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 134...我们可以表达该函数如下所示:
fib(0) = 0
fib(1) = 1
fib(n) = fib(n-1) + fib(n-2)
for n &= 2
在python里如何表达这样一个函数呢?我们可以用递归来表达。所谓递归,就是一个函数不断引用它自身,直到抵达一个可计算出确定值的初始态。
def fib(n):
if n &= 1:
return fib(n-1) + fib(n-2)
分形概念由法国数学家曼德布罗在1975年提出,用于形容局部与整体相似的形状。如下所示图案叫科赫雪花(Koch fractal),是一个典型的分形。
如何用计算机制造出这个图像呢?仔细观察并思考这个图像的绘制过程,我们会发现用递归的方式也能解决。我们称第一张图(只有一条直线)为0阶(order)雪花,第二张为1阶,以此类推。我们会发现,例如第二阶的图,可以通过引用三次第一阶的图来绘制。因此这个结构可以使用如下函数实现:
def koch(t, order, size):
if order == 0:
t.forward(size)
for angle in [60, -120, 60, 0]:
koch(t, order-1, size/3)
t.left(angle)
其中t是一个移动的小海龟(类似netlogo里的turtle),order是层级,size是整个雪花的线性规模。如果我们不用递归,则有n阶就必须定义n个函数:
def koch_0(t, size):
t.forward(size)
def koch_1(t, size):
for angle in [60, -120, 60, 0]:
koch_0(t, size/3)
t.left(angle)
def koch_2(t, size):
for angle in [60, -120, 60, 0]:
koch_1(t, size/3)
t.left(angle)
def koch_3(t, size):
for angle in [60, -120, 60, 0]:
koch_2(t, size/3)
t.left(angle)
可见递归确实是一种非常简洁的思想。
我们可以使用递归函数制造出分形结构,并且不断修正其中的参数,来构造动态演化的结构.为了帮助进行动态演示,下面这段程序使用了pygame模块,安装地址见。
import pygame, math
pygame.init()
# prepare the pygame module for use
# Create a new surface and window.
surface_size = 1024
main_surface = pygame.display.set_mode((surface_size,surface_size))
my_clock = pygame.time.Clock()
def draw_tree(order, theta, sz, posn, heading, color=(0,0,0), depth=0):
trunk_ratio = 0.29
# How big is the trunk relative to whole tree?
trunk = sz * trunk_ratio # length of trunk
delta_x = trunk * math.cos(heading)
delta_y = trunk * math.sin(heading)
(u, v) = posn
newpos = (u + delta_x, v + delta_y)
pygame.draw.line(main_surface, color, posn, newpos)
if order & 0:
# Draw another layer of subtrees
# These next six lines are a simple hack to make the two major halves
# of the recursion different colors. Fiddle here to change colors
# at other depths, or when depth is even, or odd, etc.
if depth == 0:
color1 = (255, 0, 0)
color2 = (0, 0, 255)
color1 = color
color2 = color
# make the recursive calls to draw the two subtrees
newsz = sz*(1 - trunk_ratio)
draw_tree(order-1, theta, newsz, newpos, heading-theta, color1, depth+1)
draw_tree(order-1, theta, newsz, newpos, heading+theta, color2, depth+1)
def gameloop():
while True:
# Handle evente from keyboard, mouse, etc.
ev = pygame.event.poll()
if ev.type == pygame.QUIT:
# Updates - change the angle
theta += 0.01
# Draw everything
main_surface.fill((255, 255, 0))
draw_tree(9, theta, surface_size*0.9, (surface_size//2, surface_size-50), -math.pi/2)
pygame.display.flip()
my_clock.tick(120)
gameloop()
pygame.quit()

我要回帖

更多关于 python中的递归函数 的文章

 

随机推荐