我正在尝试解决一个家庭作业问题:
纳庇勒山脉的第一批探险家,在闲暇时间,以 喊着不同的短语,听回声的声音。在他们的游戏中,他们注意到 第一个回声总是原始短语的一小部分,第二个回声是原始短语的一小部分 第一次回音,一直到一切都静了下来。 例如,在Napieuler地区,分数约为0.368
当喊一个100秒长的短语时,第一个回声是100*0.368秒长。 第二个是100*0.368*0.368,以此类推,直到看不见为止。 写一个程序,在文本中,近似于纳皮尔勒山脉的回声。 程序必须通过控制台接收它想要接收的回声的特征部分 近似值(作为一个十进制数)。 然后程序必须调用一个递归函数,您应该收到一个短语。 最后,您应该打印出短语的所有回声,包括原始短语 一个人类。你还必须显示总的重复,包括原来的短语。 由于你不容易计算出一个书面短语的时长,你可以假设 字母需要固定的时间,包括空格和标点符号。将乘法取整为 非整数结果。 如果您在不调用递归函数的情况下正确地执行程序,则在 问题
你的职能需要
Enter the fraction: 0.369
Enter the sentence: I love mac and cheese
I love mac and cheese
cheese
se
Enter the fraction: 0.369
Enter the sentence: Today it is not a beautiful spring day. I wish ot was.
Today it is not a beautiful spring day. I wish ot was.
day. I wish it was.
it was.
s.
Total of echoes: 4
我已经开始写代码了,但是我一直收到一个堆栈溢出错误。任何帮助都将不胜感激
不断产生堆栈溢出错误的代码:
def echo(a,b):
if len(b)>=2:
return [b]+echo(a,b[(-(int(len(b)*a))):])
else:
return []
print(echo(0.369,"I love mac and cheese."))
您可以使用几行简单的代码自行调试。如果您通过添加一个计数器将代码限制为10个递归来人为地限制代码的堆栈溢出,并添加一个print语句来查看每个递归调用中程序的状态,那么您可以很容易地找到代码正在执行的操作,并将其与您期望的操作进行比较:
调用
print(echo(0.369,"I love mac and cheese."))
就可以得到:这意味着,正如乔兰所说,你最终会无限地计算这一部分:
它的计算结果总是
'e.'
有了这些知识,我相信您一定能够想出如何修复代码
在上一次迭代中,您有
e.
哪个是len 2
你可以
echo(a,b[-0:])
实际计算结果是
echo(a,b[0:])
用
e.
再次调用您需要更改两个字符(一个删除一个插入),以更正代码
当
len(b) == 2
时,则len(b) * a == 0.738
,且int(len(b)*a)
为0
-0
与0
相同,因此使用b[0:]
进行递归调用,这与b
相同,因此可以无限递归当
int(a * len(b)) == 0
时,需要停止递归相关问题 更多 >
编程相关推荐