我正在编写一个递归函数,它将一个数字作为输入并根据输入返回一个字符串。
这是我的代码:
def sum_power2( n ):
n_int = int( n )
if n_int == 0:
return '1'
else:
return sum_power2( n_int * '(1 + 1)' )
最初代码导致错误代码为
can't multiply sequence by non-int of type 'str'
当n未转换为' int'现在我收到了这个错误代码。请帮我解决一下,谢谢!
输入 sum_power2(2)输出应为&#39;((1 + 1)(1 + 1))&#39; < / p>
答案 0 :(得分:2)
如果我正确理解了这个问题,你想要sum_power2(n)返回n个字符串的副本(1 + 1),是吗?
在这种情况下,对于n> 1,递归方式是将字符串(1 + 1)附加到sum_power2(n-1)的输出。 (这需要一个特殊情况,当n = 0时只给1)
看起来像这样:
def sum_power2(n):
if n == 0:
return "1"
elif n == 1:
return "(1 + 1)"
else:
return sum_power2(n-1) + "(1 + 1)"
(另外,看起来你的论证是一个int,所以我省略了转换)
答案 1 :(得分:1)
您的主要问题是,您尝试将int
和string
组合投放到期望int
的递归函数。
要使递归函数起作用,您需要将原始问题减少到基本情况和退出
我只是将 n 简化为 1 并退出并连接我们的结果,以便在遇到基本情况时返回。
如果您正在寻找,请告诉我。
**编辑**
工作代码:
def sum_power2(n):
n_int = int( n )
if n_int == 0:
return '1'
elif n_int == 1:
return '(1 + 1)'
else:
return '(1 + 1)' + sum_power2( n_int - 1 )
print sum_power2(2)
<强>结果:强>
Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
1
(1 + 1)
(1 + 1)(1 + 1)
(1 + 1)(1 + 1)(1 + 1)
>>>
答案 2 :(得分:0)
def sum_power2( n ):
n_int = int( n )
if n_int == 0:
return '1'
else:
return n_int * '(1 + 1)'
>>> sum_power2(2)
'(1 + 1)(1 + 1)'
您的错误发生是因为您致电sum_power2( n_int * '(1 + 1)' )
。