在方法内定义的变量为什么不会丢失数据?该怎么处理
在方法内定义的变量为什么不会丢失数据?
------解决方案--------------------
程序貌似没啥问题啊,,,
------解决方案--------------------
是因为你递归的问题,先把变量压栈,然后在出栈,这样你出栈的变量还保留这被压栈时的值,出来后就会加上你当前的值
------解决方案--------------------
------解决方案--------------------
主要问题在于你的函数返回值也是int,再加上变量也是int累计,及自己跟踪看看吧
------解决方案--------------------
方法结束,方法中 的值类型都会被 立即释放销毁;引用类型会 被 .Net 内存回收器 间接销毁;
函数值只会有 一个返回值被返回,且不会在函数内销毁;
——至于,递归;这只是一个方法此次调用的问题:子方法不执行完,母方法的数据状态依然保持!!
递归只是在于:子方法下可能有 孙方法,孙方法下面可能还有 重孙方法;——方法中数据的销毁,也是 从 重孙方法> 孙方法 > 子方法 > 母方法;
——你的程序在递归过程中,母方法的 数据方然得保存着!
————————————————————————————————————————————
你的递归中:DirectoryCountLines 和 CountLines
都是自己调用自己,即,母方法 和 子方法 都是同一个方法体.....
- C# code
using System; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //总行数 int totalLineCount = 0; //目录 string directory; if (args.Length > 0) { directory = args[0]; } else { directory = Directory.GetCurrentDirectory(); } totalLineCount = DirectoryCountLines(directory); Console.WriteLine(totalLineCount); Console.ReadLine(); } /// <summary> /// 计算目录数 /// </summary> /// <param name="directory"></param> /// <returns></returns> static int DirectoryCountLines(string directory) { //这里的变量不是每次方法运行一次就会把次赋为0吗?为什么还可以累加上次的结果。 int lineCount = 0; foreach (string file in Directory.GetFiles(directory, "*.txt")) { lineCount += CountLines(file); } //递归子目录 foreach (string subdirectory in Directory.GetDirectories(directory)) { lineCount += DirectoryCountLines(subdirectory); } return lineCount; } /// <summary> /// 计算行数 /// </summary> /// <param name="file"></param> /// <returns></returns> private static int CountLines(string file) { string line; int lineCount = 0; FileStream stream = new FileStream(file, FileMode.Open); StreamReader reader = new StreamReader(stream); line = reader.ReadLine(); while (line != null) { if (line.Trim() != "") { lineCount++; } line = reader.ReadLine(); } reader.Close(); return lineCount; } } }
------解决方案--------------------
程序貌似没啥问题啊,,,
------解决方案--------------------
是因为你递归的问题,先把变量压栈,然后在出栈,这样你出栈的变量还保留这被压栈时的值,出来后就会加上你当前的值
------解决方案--------------------
------解决方案--------------------
主要问题在于你的函数返回值也是int,再加上变量也是int累计,及自己跟踪看看吧
------解决方案--------------------
方法结束,方法中 的值类型都会被 立即释放销毁;引用类型会 被 .Net 内存回收器 间接销毁;
函数值只会有 一个返回值被返回,且不会在函数内销毁;
——至于,递归;这只是一个方法此次调用的问题:子方法不执行完,母方法的数据状态依然保持!!
递归只是在于:子方法下可能有 孙方法,孙方法下面可能还有 重孙方法;——方法中数据的销毁,也是 从 重孙方法> 孙方法 > 子方法 > 母方法;
——你的程序在递归过程中,母方法的 数据方然得保存着!
————————————————————————————————————————————
你的递归中:DirectoryCountLines 和 CountLines
都是自己调用自己,即,母方法 和 子方法 都是同一个方法体.....