Python 在字符矩阵中递归搜索单词

Python 在字符矩阵中递归搜索单词,python,recursion,Python,Recursion,我正试图为家庭作业编写一个程序,使用递归在矩阵(2x2或更多)中搜索一个单词,它可以从左到右或从上到下(没有其他方向),例如,如果我在矩阵中搜索ab,[[['a','b'],['c','d'],程序应该返回单词的写入方向(横过)、起始索引(0)、结束索引(2)以及行或列的索引(0) 我的问题是我有递归的想法,但我不能实现它。我试图把问题分解成更多的小问题,比如在给定的行中搜索单词,我首先考虑最小的情况,即2x2矩阵,在第一行和第一列,我需要在第一个字符的右边和底部搜索一个,并检查它们是否等于给定

我正试图为家庭作业编写一个程序,使用递归在矩阵(2x2或更多)中搜索一个单词,它可以从左到右或从上到下(没有其他方向),例如,如果我在矩阵中搜索
ab
[[['a','b'],['c','d']
,程序应该返回单词的写入方向(横过)、起始索引(0)、结束索引(2)以及行或列的索引(0)
我的问题是我有递归的想法,但我不能实现它。我试图把问题分解成更多的小问题,比如在给定的行中搜索单词,我首先考虑最小的情况,即2x2矩阵,在第一行和第一列,我需要在第一个字符的右边和底部搜索一个,并检查它们是否等于给定的字符串,然后给我的递归函数一个索引为+1的小问题
然而,在递归的基本情况下,我想不出如何使我的函数返回,两天来我一直在尝试解决它并想办法实现它,我无法编写我所想或绘制的代码。

请注意,我不能使用任何循环,如果有人能将我推向正确的方向,我将非常感激,任何帮助都将非常感谢,提前谢谢

编辑:更多示例:
对于矩阵的输入:
[['a','b','c'],['d','e','f'],['g','h','i']
输出为:
使用字符串
ab
:交叉,0,0,2
使用字符串
be
:向下,1,0,2

使用字符串ghi:cross,2,0,3我假设可以从任何位置找到我们要查找的单词,但我们只能从上到下或从左到右移动

在这种情况下,您应该有一个函数,该函数接受起始索引和方向,然后该函数从给定索引开始沿着给定方向继续移动,并一直移动,直到它没有发现不匹配,并且它仅根据给定字符串的匹配返回true或false

现在你需要为矩阵的每个索引调用这个函数,以及从上到下和从左到右的两个方向,在任何索引,如果你得到的函数输出为true,那么你已经找到了答案

这是一个非常基本的想法,接下来它取决于你想如何优化这个方法中的东西


更新:

避免使用循环

我可以想到的另一种方法是,我们现在定义的函数将获取要查找的行、列和字符串。因此,在每次调用时,您将首先检查给定行和列中的字符是否与给定字符串的第一个字符匹配,如果匹配,那么它将调用另外两个函数,一个在右方向,另一个在下方向,以及删除第一个字符的字符串

现在要检查矩阵的所有列,无论如何都要使用完全相同的字符串在向下和向右方向调用函数

基本情况是,如果您到达字符串的末尾,那么您已经找到了答案,您将返回True,否则返回False

这里还要注意的一点是,如果4个函数调用中的任何一个都给出了True响应,那么当前行/列也将返回True


干杯

起始索引(0)、结束索引(2)和行或列的索引(0)起始索引
0
和结束索引
2
如何?
a
的索引是
[0][0]
而b
[0][1]
的索引,结束索引不应该是
[0][1]
?你能再举几个例子吗?什么行和collumn的行或列(0)的索引?@Countour积分我又添加了一些例子,很抱歉还不太清楚,
1,0,2
的输出是怎样的
be
。什么的起始指数?什么的结束索引?你说的是哪一行或哪一列?
b
的索引是
[0][1]
e
的索引是
[1][1]
。因此它从索引
[0][1]
开始,在
[1][1]
结束。您是如何获得
1
0
的?还有什么是
2
?@count我们的积分问题是如何表述的,1,0,2是'be'的输出,因为'be'位于起始索引0(第一行)的第二列(索引1)中,它在索引(1)的第二行结束,所以他们把结尾放在2。对于“ghi”也是一样,它位于第三行(索引2),从第(0)列开始,到第(2)列结束,所以他们把它放在3。你可以说结尾比最后一个索引多加一个。我很抱歉解释得不好谢谢你的回答,我很感激,说实话我试过这么做,但我忘了单词的索引,另一个问题是关于为每个索引调用函数,我不允许使用循环,你有什么关于如何递归遍历所有矩阵的提示吗?(在一行中,我可以只发送第一个索引并切片第一个元素和调用函数,但我无法使用2d矩阵)。@Pwaol更新了答案。请检查。非常感谢您的解释,经过几个小时的尝试,在这里的人的帮助下,我终于成功了。首先,我制作了两个递归函数,一个搜索行和一个搜索列,然后制作了一个递归函数,该函数的索引从0到列表长度,并调用了我的两个函数。太棒了。祝你好运