C# 在尝试使用递归函数时,C字符串一直变为null

C# 在尝试使用递归函数时,C字符串一直变为null,c#,recursion,C#,Recursion,我在编写递归函数的过程中遇到了一个难题,该函数将显示符号“%”,并根据用户输入的数字进行替换。 因此,如果我说用户输入了数字5,结果将是:'%%' 我想我已经完成了大部分工作。目前唯一的问题是,我必须显示符号的字符串在函数每次迭代时都会不断变为“null” 这是我的代码: public static string ShowGibrish(int num) { string s=""; while (num!=0) { if (num % 2 == 0)

我在编写递归函数的过程中遇到了一个难题,该函数将显示符号“%”,并根据用户输入的数字进行替换。 因此,如果我说用户输入了数字5,结果将是:'%%'

我想我已经完成了大部分工作。目前唯一的问题是,我必须显示符号的字符串在函数每次迭代时都会不断变为“null”

这是我的代码:

public static string ShowGibrish(int num)
{
    string s="";
    while (num!=0)
    {
        if (num % 2 == 0)
        {
            s = s+ "%";
            ShowGibrish(num - 1);
        }
        else if (num % 2 != 0)
        {
            s =s+ "#";
            return ShowGibrish(num - 1);
        }

    }
    return s;
}
另一个学生使用stringbuilder使字符串显示,并使用另一个私有函数并用公共函数调用它。但我认为我的代码也可以工作。

试试这个:

public static string ShowGibberish(int num)
{
    if (num == 0) { return ""; }
    else {
         if (num % 2 == 0) {return "%" + ShowGibberish(num-1);}
         else {return "#" + ShowGibberish(num-1);}
    }
}

您的代码混合了迭代和递归方法。仅使用其中一种方法即可彻底解决此问题。

问题似乎出在您的while循环中。发生的是堆栈上函数的每个实例都在执行while循环,而不是仅由递归处理循环。只有在基本情况下!=0,而不是在基本情况下!=0

变量的作用域是各自的函数,因此在代码的当前状态下,while循环正在计算的值永远不能达到0


很抱歉,我不打算为您提供代码,因为它是一个赋值。

您遇到的第一个问题是,您在方法的开头声明了一个新字符串,但您从未将该字符串传输到递归函数中,这意味着您失去了连接的所有进度

第二个问题是,由于某种原因,您有一个while循环,据我所知,这里不需要它

首先向函数添加一个可选参数:string s=。 删除while循环,它不是必需的 您应该做的第一件事是检查num是否为0,如果为,则返回s。 根据奇偶逻辑修改s 然后返回递归调用ShowGibrishnum-1,s的结果
我删除了代码,因为我没有抓到作业部分。

你是对的,但因为这是他们的作业,我认为你不应该提供代码。很好的简短实现,只是为了整洁。Brish的拼写有两种不同的方式,也许可以更正?@Alex Rosenfeld谢谢,它不像我的代码,但它很有效!谢谢你的解释!相信我,我不知道那里发生了什么。一位老师用一种方式教,另一位老师告诉你‘不,应该是这样的’我不知道他们想要什么了。