一个简单的递归面试题
2011-03-10 16:50 音乐让我说 阅读(700) 评论(0) 编辑 收藏 举报这几天,一直都在找工作,一直都在笔试面试,其中也遇到很多笔试题目,大多都记不清楚了,应该不是很难。
下面分享一个公司给我出的机试题目:要求当m<n时,利用递归实现 m + (m+1) + (m+2) + ... + n
并要求用控制台程序实现,并且当用户输入的参数错误时,提示用户是否要重新输入。
想了一会,写出了如下代码:
/* ============================================================================= 作者:音乐让我说 代码描述:一个简单面试题,要求当m<n时,利用递归实现 m + (m+1) + (m+2) + ... + n 谢谢您的支持,欢迎您的转载,转载时请注明,谢谢! ============================================================================= */ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TempConApp { class Program { static void Main(string[] args) { bool isContinue = true; do { Console.WriteLine("\n=======================================================\n"); bool failedIsContinued; long num1; if (!GetUserInputNum(1, out num1, out failedIsContinued)) { isContinue = failedIsContinued; continue; } long num2; if (!GetUserInputNum(2, out num2, out failedIsContinued)) { isContinue = failedIsContinued; continue; } if (num1 >= num2) { Console.Write("第 1 个数字必须小于第 2 个数字!"); isContinue = GetFailedIsContinued(); continue; } long result = GetResult(num1, num2); Console.WriteLine("结果为:" + result); } while (isContinue); Console.WriteLine("程序运行完毕!"); Console.ReadKey(); } /// <summary> /// 利用递归,得到从第一个数字到第二个数字之间所有数的总和(最后的总和包括第一个数和第二个数) /// </summary> /// <param name="beginNum">第一个数</param> /// <param name="endNum">第二个数</param> /// <returns></returns> static long GetResult(long beginNum, long endNum) { if (beginNum >= endNum) { return beginNum; } return endNum + GetResult(beginNum, endNum - 1); } /// <summary> /// 得到用户输入的数字 /// </summary> /// <param name="serialNum">数字编号,表明这是输入的第几个数字,第一个调用该方法,传入 1 </param> /// <param name="outputNum">返回的值</param> /// <param name="failedIsContinued">转换失败后,是否要继续</param> /// <returns>返回用户输入的是否是数字,如果是,则返回 true </returns> static bool GetUserInputNum(int serialNum, out long outputNum, out bool failedIsContinued) { bool returnFlag = true; failedIsContinued = true; Console.Write("请输入第 " + serialNum + " 个数字:"); string strNum = Console.ReadLine(); if (!long.TryParse(strNum, out outputNum)) { //转换失败 returnFlag = false; Console.Write("您输入的第 " + serialNum + " 个数字错误!"); failedIsContinued = GetFailedIsContinued(); } return returnFlag; } /// <summary> /// 当失败后,获取用户是否想要继续 /// </summary> /// <returns></returns> static bool GetFailedIsContinued() { Console.Write("是否继续重新输入?(y/n) :"); string isContinueWord = Console.ReadLine(); if (!string.Equals(isContinueWord, "Y", StringComparison.CurrentCultureIgnoreCase)) { //不继续 return false; } return true; } } }
谢谢您的浏览!
作者:音乐让我说(音乐让我说 - 博客园)
出处:http://music.cnblogs.com/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。