如何使用递归来使用Python查找回文?
我刚刚开始探索编程的奇迹。我正在尝试编写一个代码来识别数字回文。只是看数字而不是文本。我正试图在这里学习使用递归。但我只是没有到达任何地方,我无法弄清楚它有什么问题。
我的想法是检查第一个字符串与最后一个字符串,然后删除这两个匹配,并重复。最终没有任何东西(暗示它是回文)或者会有一对不匹配(暗示相反)。
我知道有更好的代码可以找到回文,但我只是想尝试一下递归。
那有什么不对?
def f(n):
global li
li=list(str(n))
if (len(li)==(1 or 0)):
return True
elif li[len(li)-1]==li[0]:
del li[0]
del li[len(li)-1]
if len(li)==0:
return True
if len(li)>0:
global x
x=''.join(li)
str(x)
f(x)
else:
return False
提前致谢!
没有找到相关结果
已邀请:
7 个回复
坝镰补翔奋
和
全局?在递归中,所有变量都应该是本地的。 你为什么要在
和
之间来回转换?你可以下标两个 您需要返回递归调用的结果:
试试这些建议,看看它是如何运作的。
版萍层分
并没有做你期望它做的事情。
将始终评估为
。 你可能想要:
味芯憨
语句。因此,我从代码中删除了两行
。
:将字符串转换为列表是不必要的,因为Python中的字符串具有与不可变列表类似的接口。所以一个简单的
就足够了。
:虽然它看起来不错,但实际上这是一种将值与其他几个值进行比较的错误方法。
运算符从其左或右操作数返回第一个“true”值,因此在这种情况下它总是返回
。相反,您可以使用
运算符,它检查左操作数是否是右操作数的元素。如果我们将正确的操作数设为元组
,那么一切都会好的。此外,围绕
声明不需要括号。你应该写:
很好,但是我们可以在Python中写得更短,因为它支持负列表索引:
因为我们不使用列表(可变序列),因为第2点,我们不能对它们做
。无论如何,删除列表的第一个元素在Python中是非常低效的(必须复制整个列表)。出于同样的原因,我们做不到
。相反,我们可以使用“拼接”运算符从字符串中提取子字符串:
是不必要的。在Python中,如果使用
进行测试,空字符串和列表将解析为False。所以你可以写
:你不必再检查
是否为空 - 你在第6点检查了它。所以一个简单的
就足够了。或者甚至更好,完全删除此行并取消其余功能,因为6.19中的
的主体包含
。因此,如果我们没有进入
,我们就会在
中完全不写。
:我们不需要将字符串转换为字符串,因为在2中做出了决定。删除此行。
:这一行在你的代码中没有做任何有用的事情,因为
不会修改它的参数,而是返回一个新的值(所以
会更有意义)。你也可以删除它。
:这是在Python中调用递归函数的有效方法,但是你必须对它的值做一些事情。也许回来吧?我们将它改为:
(因为我们不再有
变量)。 我们最终得到以下代码:
这几乎是我们所需要的,但仍然可以进行一些改进。如果你看看
的线条,你会发现它们没有必要。如果我们删除它们,那么将使用空字符串作为参数调用
,
将等于0并且无论如何都将返回
。所以我们将继续删除这些行:
就是这样!祝你成为一名成功的程序员!
勺的驴吓识
镶骄册筷
耐钨徒
剿畦缄饥小
这个代码甚至适用于我在编程时出现任何错误的负数 别介意