Python 数学序列

Python mathematical sequence

提问人:Jemala 提问时间:1/14/2022 最后编辑:BarmarJemala 更新时间:1/14/2022 访问量:62

问:

我必须编写代码来手动输入 n 个数字,代码应该发现 sequence.n 的 n 个成员应该是自然数。该序列的公式是

f(n)=(f(n-1))²-1

第一个成员是 2,第二个是 3,第三个是 8,每个成员都是前一个数字的平方。代码应打印输入的序列的 n 个成员。 例如

In:3
Out:8

In:4
Out:63

我写了代码,但它不起作用

n = int(input("'input n:"))

def f(n):
  if n < 0:
    print('Undefined')
  else:
    return (f(n - 1) ** 2) - 1

print(f(n))
Python 递归 数学 序列

评论

3赞 Barmar 1/14/2022
您需要定义基本情况是什么,并在该情况下返回一些内容。
2赞 0x5453 1/14/2022
“它不起作用”并不是特别有用。它是否会引起错误,给出错误的结果,陷入无限循环等?请详细描述问题。
0赞 Barmar 1/14/2022
当它试图提升到一个幂时,它显然会得到一个错误。None
3赞 Ian Kenney 1/14/2022
当 n=0 时,函数应该返回什么?
1赞 chepner 1/14/2022
基本情况的值为 2;等。根据您不必要的错误输出,您似乎已经决定了 .对于负值,您可能应该只提出一个 .2**2 - 1 == 33**2 -1 == 8f(0) == 2ValueError

答:

1赞 Serge Ballesta 1/14/2022 #1

在递归中,您需要为停止索引返回一个确定的值。

在这里,你只需要在代码中写下序列的第一个值是 2:

def f(n):
  if n < 0:
    raise ValueError('Undefined')  # better to raise to make sure to abort
  elif n == 0:
    return 2  
  else:
    return (f(n - 1) ** 2) - 1

这足以返回 3 个并返回 8 个......f(1)f(2)