一个简单的递归面试题
2011-03-10 16:50 音乐让我说 阅读(701) 评论(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/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步