Recursion 递归方法-并非所有代码路径都返回值!

Recursion 递归方法-并非所有代码路径都返回值!,recursion,Recursion,它说并不是所有的代码路径都返回一个值 private string Fisrt(string nonTerminal) { for (int j = 0; j < 6; j++) { if (Tokens[j, 0] == nonTerminal) { if (char.IsLower((char)Tokens[j, 3][0]))

它说并不是所有的代码路径都返回一个值

private string Fisrt(string nonTerminal)
    {
        for (int j = 0; j < 6; j++)
        {
            if (Tokens[j, 0] == nonTerminal)
            {
                if (char.IsLower((char)Tokens[j, 3][0]))
                    return (Tokens[j, 3]);
                else
                    Fisrt(Tokens[j, 3]);
            }
        }
    }
private string first(字符串非终结符)
{
对于(int j=0;j<6;j++)
{
if(令牌[j,0]==非终结符)
{
if(char.IsLower((char)令牌[j,3][0]))
返回(代币[j,3]);
其他的
第一部分(代币[j,3]);
}
}
}

例如,如果值为0到5的
令牌[j,0]
中没有一个是
非终端的怎么办

或者,如果
标记[j,3][0]
从来都不是小写的?

私有字符串first(字符串非终结符)
private string Fisrt(string nonTerminal)
    {
        for (int j = 0; j < 6; j++)
        {
            if (Tokens[j, 0] == nonTerminal)
            {
                if (char.IsLower((char)Tokens[j, 3][0]))
                    return (Tokens[j, 3]);
                else
                    return Fisrt(Tokens[j, 3]);
                 /* ^ add a return here */
            }
        }

        return SOMETHING;
     /* ^ You also need to add some return value here */
    }
{ 对于(int j=0;j<6;j++) { if(令牌[j,0]==非终结符) { if(char.IsLower((char)令牌[j,3][0])) 返回(代币[j,3]); 其他的 第一次返回(代币[j,3]); /*^在此处添加退货*/ } } 归还某物; /*^您还需要在此处添加一些返回值*/ }

如果
for
循环正常退出,您还需要决定返回哪个字符串值(或null)。

您应该返回递归步骤

`return First(Tokens[j, 3])`

并处理
外部
之外的情况,如果
在函数中声明,则返回字符串值,否则不返回字符串值。将return语句添加到else..如果
Tokens[j,0]==nonTerminal
永远不为真怎么办?