使用 python 模拟具有多个后代的斐波那契兔子
Simulating Fibonacci's Rabbits with multiple offsprings using python
假设我从一对兔子开始,每对繁殖 3 对兔子。
设新兔子对为 N
,成熟兔子对为 M
:
N 0
M 1
MNNN 4
MNNN MMM MMM MMM 19
所以这个系列是0 1 4 19
我们如何在 Python 上使用循环执行此操作:
我试过了:
x="N" #new rabbit pair
x=x.replace("N","M")
x
'M' #Mature rabbit pair
x=x.replace("M","MNNN")
x
'MNNN'
x=x.replace("M","MN")
x=x.replace("N","M")
x
'MNNNMMM'
如何使用 xrange/range 函数将其放入循环中。
谢谢
你可以试试这样的 -
mature = 'M'
kid = 'N'
start = 'N'
for i in range(10):
ms = start.count(mature)
start = start.replace(kid ,mature)
start = start + kid * (ms * 3)
print(start)
对于性能和内存使用 - 您可以使用 -
mature = 'M'
kid = 'N'
start = (0,1)
print(mature * start[0] + kid * start[1])
for i in range(10):
newmature = start[1]
newkid = start[0] * 3
start = (start[0] + newmature , start[1] + newkid - newmature)
print(mature * start[0] + kid * start[1] + " - " + str(start[0] + start[1]))
一步的过程是将所有'M'
替换为'MNNN'
,将所有'N'
替换为'M'
,所以:
def step(state):
return ''.join(['MNNN' if s == 'M' else 'M' for s in state])
例如:
>>> s = 'N'
>>> for _ in range(5):
print s, len(s)
s = step(s)
N 1
M 1
MNNN 4
MNNNMMM 7
MNNNMMMMNNNMNNNMNNN 19
假设我从一对兔子开始,每对繁殖 3 对兔子。
设新兔子对为 N
,成熟兔子对为 M
:
N 0
M 1
MNNN 4
MNNN MMM MMM MMM 19
所以这个系列是0 1 4 19
我们如何在 Python 上使用循环执行此操作:
我试过了:
x="N" #new rabbit pair
x=x.replace("N","M")
x
'M' #Mature rabbit pair
x=x.replace("M","MNNN")
x
'MNNN'
x=x.replace("M","MN")
x=x.replace("N","M")
x
'MNNNMMM'
如何使用 xrange/range 函数将其放入循环中。
谢谢
你可以试试这样的 -
mature = 'M'
kid = 'N'
start = 'N'
for i in range(10):
ms = start.count(mature)
start = start.replace(kid ,mature)
start = start + kid * (ms * 3)
print(start)
对于性能和内存使用 - 您可以使用 -
mature = 'M'
kid = 'N'
start = (0,1)
print(mature * start[0] + kid * start[1])
for i in range(10):
newmature = start[1]
newkid = start[0] * 3
start = (start[0] + newmature , start[1] + newkid - newmature)
print(mature * start[0] + kid * start[1] + " - " + str(start[0] + start[1]))
一步的过程是将所有'M'
替换为'MNNN'
,将所有'N'
替换为'M'
,所以:
def step(state):
return ''.join(['MNNN' if s == 'M' else 'M' for s in state])
例如:
>>> s = 'N'
>>> for _ in range(5):
print s, len(s)
s = step(s)
N 1
M 1
MNNN 4
MNNNMMM 7
MNNNMMMMNNNMNNNMNNN 19