Я пытаюсь изменить строку внутри рекурсии. Вот код: -
using System;
public class Program
{
public static void Main()
{
string s = "abcdc";
string added = "";
checkIfPalindrome(s , added);
Console.WriteLine( added);
}
public static void checkIfPalindrome(string s , string added)
{
//Console.WriteLine(added);
if(s.Length < 2)
{
return;
}
if(s[0] == s[s.Length -1])
{
checkIfPalindrome(s.Substring(1,s.Length-2) , added);
}
else
{
added = s[0] + added;
checkIfPalindrome(s.Substring(1,s.Length-1), added) ;
}
}
}
Вот скрипка для того же: -
<iframe width="100%" height="475" src="https://dotnetfiddle.net/Widget/u4119h" frameborder="0"></iframe>
Я ожидаю, что добавленный объект будет изменен внутри рекурсии и появится в результате вне вызова функции и внутри основного метода, поскольку строка является ссылочным типом. Но значение added
литерал - пустая строка. Хотя, когда рекурсия достигает базового случая, она имеет значение ba
.
Также правильное значение отражается, когда ключевое слово ref
используется для передачи added
Неужели мое понимание неверно?