Python 我的代码产生了一个递归逻辑错误,我不知道';我不知道如何修理它

Python 我的代码产生了一个递归逻辑错误,我不知道';我不知道如何修理它,python,recursion,compiler-errors,logic,Python,Recursion,Compiler Errors,Logic,它打印的不是预期的输出:[2,0,4,16,144,16384] 代码应该这样做: 输入:此函数传递定义数字序列的开始(>=0)、停止(>start)和步骤(>=1)值。 输出:此函数返回相应K序列的列表。 k序列是k(n)=(k(n-1)+k(n-2))^2你在k_comp中混淆了赋值和相等 你有: def k_comp(n): n_new = 0 if n == 0: n_new = 2 if n == 1: n_new == 1 if n >

它打印的不是预期的输出:[2,0,4,16,144,16384]

代码应该这样做: 输入:此函数传递定义数字序列的开始(>=0)、停止(>start)和步骤(>=1)值。 输出:此函数返回相应K序列的列表。
k序列是k(n)=(k(n-1)+k(n-2))^2

你在k_comp中混淆了赋值和相等

你有:

def k_comp(n):
  n_new = 0
  if n == 0:
      n_new = 2
  if n == 1:
      n_new == 1
  if n > 1:
      n_new = (k_comp(n-1) + k_comp(n-2))**2
  return n_new

def Kseq(start, stop, step):
""" (int,int,int) -> list of integers
Kseq(0,6,1)--->
[2, 1, 9, 100, 11881, 143544361]
Kseq(2,6,2)---->
[9, 11881]


"""

  final_list = []
  append_this = 0
  for i in range (start,stop,step):
      append_this = k_comp(i)
      final_list.append(append_this)

  return final_list

print(Kseq(0,6,1))
你应该:

if n == 1:
   n_new == 1
单个“=”表示将右侧的值分配给左侧的变量


Double'='表示左值和右值相等。在这种情况下,它将继续不,它不相等,因此为假。False是有效的python语句;它只是做不到你所期望的。

你把分配和平等混为一谈了

你有:

def k_comp(n):
  n_new = 0
  if n == 0:
      n_new = 2
  if n == 1:
      n_new == 1
  if n > 1:
      n_new = (k_comp(n-1) + k_comp(n-2))**2
  return n_new

def Kseq(start, stop, step):
""" (int,int,int) -> list of integers
Kseq(0,6,1)--->
[2, 1, 9, 100, 11881, 143544361]
Kseq(2,6,2)---->
[9, 11881]


"""

  final_list = []
  append_this = 0
  for i in range (start,stop,step):
      append_this = k_comp(i)
      final_list.append(append_this)

  return final_list

print(Kseq(0,6,1))
你应该:

if n == 1:
   n_new == 1
单个“=”表示将右侧的值分配给左侧的变量


Double'='表示左值和右值相等。在这种情况下,它将继续不,它不相等,因此为假。False是有效的python语句;你的问题在于你的第二个
如果
k_comp()
中的
条件是一个平等测试:

 if n == 1:
     n_new = 1
这就剩下了
n_new=0
,所以我想你的意思是:

if n == 1:
    n_new == 1
更改后:

if n == 1:
    n_new = 1
注意:这将是非常低效的,因为它会多次计算
k_comp(k)
,您可以只构造
k
的序列,例如:

In []:
Kseq(0, 6, 1)

Out[]:
[2, 1, 9, 100, 11881, 143544361]
时间上的差异:

def k_seq():
    k = [2, 1]
    for _ in range(2, n):
        k.append((k[-1] + k[-2])**2)
    return k

def Kseq(start, stop, step):
    return k_seq(stop)[start::step]

In []
Kseq(0, 6, 1)

Out[]:
[2, 1, 9, 100, 11881, 143544361]

In []:
Kseq(2, 6, 2)

Out[]:
[9, 11881]
或者作为发电机

In []:
%timeit Kseq_recursive(0, 10, 1)

Out[]:
75.8 µs ± 1.28 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

In []:
%timeit Kseq_sequence(0, 10, 1)

Out[]:
4.39 µs ± 77.7 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

您的问题在于您的第二个
,如果
k_comp()
中的
条件是平等测试:

 if n == 1:
     n_new = 1
这就剩下了
n_new=0
,所以我想你的意思是:

if n == 1:
    n_new == 1
更改后:

if n == 1:
    n_new = 1
注意:这将是非常低效的,因为它会多次计算
k_comp(k)
,您可以只构造
k
的序列,例如:

In []:
Kseq(0, 6, 1)

Out[]:
[2, 1, 9, 100, 11881, 143544361]
时间上的差异:

def k_seq():
    k = [2, 1]
    for _ in range(2, n):
        k.append((k[-1] + k[-2])**2)
    return k

def Kseq(start, stop, step):
    return k_seq(stop)[start::step]

In []
Kseq(0, 6, 1)

Out[]:
[2, 1, 9, 100, 11881, 143544361]

In []:
Kseq(2, 6, 2)

Out[]:
[9, 11881]
或者作为发电机

In []:
%timeit Kseq_recursive(0, 10, 1)

Out[]:
75.8 µs ± 1.28 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

In []:
%timeit Kseq_sequence(0, 10, 1)

Out[]:
4.39 µs ± 77.7 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

请修复缩进。是您造成了逻辑错误,而不是您的程序:D请修复您的缩进。是您造成了逻辑错误,而不是您的程序:D