已采纳回答 / 慕无忌4497977
函数在执行时需要消耗资源(内存和计算资源等),因此可以简单的理解为函数每次执行时要占用一个栈帧(你就把它理解为内存资源吧),函数执行完了就释放资源,就会减少一层栈帧。举个栗子,你计算fact(5)时要先计算fact(4),计算fact(4)时,fact(5)函数占用的资源并没有释放(他在等fact(4)的计算结果),同理计算fact(4)时,又在等fact(3)的结果。如何n够大,递归函数就很有可能耗光内存。
2017-10-23
已采纳回答 / weixin_太阳能我也能_0
首先在思考的时候你有假设了有a盘有N个圆饼,当然前提在于这个摆放一定是上面小下面大的方式。1的函数是先把除了底盘以外的圆盘借助c先到达b,此时a上还有一个底盘,print a,'->',c,直接将底盘放到C上,然后代码2就是再借助a将刚才放在b的圆盘运往c。递归设计在运用以前学过的数列之中是非常好的,他可以自己帮你推演公式,你只需要写几行代码就行。这个题目在于定义函数和分情况讨论,
2017-10-20
已采纳回答 / 浅笑清风
Tuple 操作速度快。如果您定义了一个值的常量集,并且唯一要用它做的是不断地遍历它,请使用 tuple 。如果对不需要修改的数据进行 “写保护”,可以使代码更安全。说明这一数据是常量。
2017-10-19
已采纳回答 / _天微凉_
x都是tuple类型的数据,x(0)是字符串,x(1)是数字,所以%x是将x里的两个元素分割开,并且x(0)按%s也就是字符串格式输出,x(1)按%d也就是整数格式输出。
2017-10-17
已采纳回答 / 慕粉0100288097
python里的所有东西都是对象,对象都有属性。for a in B: 底层本质的含义是对B对象进行遍历。底层的设计B对象上必须含有__iter__属性和next()方法时,B才能被for循环遍历。而刚好pyhon里,字符串对象是有__iter__属相和next()方法的,所以他是可以被for循环遍历的。换句话说,为什么sum(x,y)就等于x和y的和呢。因为sum()这个函数是被程序设计者封装了一个简单算法在里面。同理,为什么字符串对象可以被遍历呢,因为python的设计者在设计之初就对“字符串可...
2017-10-15
已采纳回答 / yc913344706
for m in M: m=m+1上面这里有问题,你只对列表中的元素m进行了改变,并没有改变列表M,应该改为下面的:for index,value in enumerate(M): value=value+1 M[index]=value
2017-10-15
已采纳回答 / 慕粉9965376
特意运行了一下R1函数:这句r[-1:],r[0:-1] = r[0:-1],r[-1:]其实是先后执行以下两步:1、r[-1:]=r[0:-1] #先把“Ronaldo”变成“RonaldRonald”,存在内存里,r这个时候还是“Ronaldo”,还没有赋值为“RonaldRonald”2、r[0:-1]=r[-1:] #再把“RonaldRonald”变成“od”,因为r还是“Ronaldo”,所以取'o'替换“RonaldRonald”中的“RonaldRonal”执行完之后r才赋值为“od”R...
2017-10-15
已采纳回答 / 幕布斯3073696
汉诺塔讲究大小顺序,小的在上大的在下,要把n个盘子从a柱移到c柱就是move(n,a,b,c)。注意函数里面的4个参数:第一个参数(n)代表的是盘子个数,第二个参数(a)的位置代表的是起始柱,第三个参数(b)代表的是过渡柱,最后一个参数(c)代表的是目标柱。你不要想具体的移动的步骤,抽象来想:第一步就是把n-1个小盘子移到b,第二步是把a柱上的最大的盘子移到c,最后是把b柱上n-1个盘子移到c所以第一步就是move(n-1,a,c,b) ,这个参数代表把n-1个盘子从a起始柱移到b目标柱,c就当是个过渡的...
2017-10-13