13

2016-04-22  11:01:00

  1. Switch…case 总结(网摘)

例题:

Console.WriteLine("1.汉堡包");
Console.WriteLine("2.薯条");
Console.WriteLine("3.鸡块");
Console.WriteLine("4.鸡腿");
Console.WriteLine("5.鸡米花"); Console.Write("请输入您的选择项目数字:");
string a = Console.ReadLine(); switch (a)
{
case "":
Console.WriteLine("您选择的是汉堡包!");
break;
case "":
Console.WriteLine("您选择的是薯条!");
break;
case "":
Console.WriteLine("您选择的是鸡块!");
break;
case "":
Console.WriteLine("您选择的是鸡腿!");
break;
case "":
Console.WriteLine("您选择的是鸡米花!");
break;
default:
Console.WriteLine("输入有误!");
break;
}

总结:switch语句和if语句的区别:

    

     大于等于(>=)、小于等于(<=)的判断用if语句,而等于(=)的判断用switch语句

     switch语句中的case类似于if…else…else if…else,但是离散值的判断。

       离散值的判断自认为是等于情况的判断)。

     switch一般都可以及用if重写,但是if不一定能用switch重写。

    不要忘了break.C#break不写是不行的,除了合并case的情况。

     case 中的值必须是常量,不能是变量、表达式。

2.递归算法(网摘)

简介:

在数学与计算机科学中,递归是指在函数的定义中使用函数自身的方法。
  递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。
递归算法解决问题的特点:
  (1) 递归就是在过程或函数里调用自身。
  (2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
  (3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
  (4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。在实际编程中尤其要注意栈溢出问题。

  借助递归方法,我们可以把一个相对复杂的问题转化为一个与原问题相似的规模较小的问题来求解,递归方法只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。但在带来便捷的同时,也会有一些缺点,也即:通常用递归方法的运行效率不高。

【问题】 编写计算斐波那契(Fibonacci)数列的第n项函数fib(n)。 
斐波那契数列为:0、1、1、2、3、……,即: 
fib(0)=0; 
fib(1)=1; 
fib(n)=fib(n-1)+fib(n-2)
(当n>1时)。 
写成递归函数有: 
int
fib(int n) 
{ if
(n==0) return 0; 
if (n==1)
return 1; 
if
(n>1) return fib(n-1)+fib(n-2); 

递归算法的执行过程分递推和回归两个阶段。在递推阶段,把较复杂的问题(规模为n)的求解推到比原问题简单一些的问题(规模小于n)的求解。例如上例中,求解fib(n),把它推到求解fib(n-1)和fib(n-2)。也就是说,为计算fib(n),必须先计算fib(n-1)和fib(n-2),而计算fib(n-1)和fib(n-2),又必须先计算fib(n-3)和fib(n-4)。依次类推,直至计算fib(1)和fib(0),分别能立即得到结果1和0。在递推阶段,必须要有终止递归的情况。例如在函数fib中,当n为1和0的情况。 
在回归阶段,当获得最简单情况的解后,逐级返回,依次得到稍复杂问题的解,例如得到fib(1)和fib(0)后,返回得到fib(2)的结果,……,在得到了fib(n-1)和fib(n-2)的结果后,返回得到fib(n)的结果。 
在编写递归函数时要注意,函数中的局部变量和参数知识局限于当前调用层,当递推进入“简单问题”层时,原来层次上的参数和局部变量便被隐蔽起来。在一系列“简单问题”层,它们各有自己的参数和局部变量。 
由于递归引起一系列的函数调用,并且可能会有一系列的重复计算,递归算法的执行效率相对较低。当某个递归算法能较方便地转换成递推算法时,通常按递推算法编写程序。例如上例计算斐波那契数列的第n项的函数fib(n)应采用递推算法,即从斐波那契数列的前两项出发,逐次由前两项计算出下一项,直至计算出要求的第n项。

习题:

1. 计算1+2+3+4+...+100的值

 static void Main(string[] args)
{
Console.WriteLine(Process2());
Console.ReadLine();
}
public static int Process2(int i)
{
//计算1+2+3+4+...+100的值
if (i == ) return ;
return Process2(i - ) + i; }

2. 计算1 -2 +3 +-4+ 5- 6 + 7 - 8 + 9的值

   static void Main(string[] args)
{ Console.WriteLine(Process3() - Process3());
Console.ReadLine();
} public static int Process3(int i)
{
//计算1 -2 +3 +-4+ 5- 6 + 7 - 8 + 9的值
if (i == ) return ;
if (i == ) return ;
else return Process3(i - ) + i;
}

3.汉诺塔问题

  static void Main(string[] args)
{
Hanoi(, 'A', 'B', 'C');
Console.ReadLine();
}
public static void Hanoi(int n ,char A, char B, char C)
{
//汉诺塔问题
//将n个盘子从A座借助B座,移到C座
if (n == ) Move(A, C);
else
{
Hanoi(n - , A, C, B);
Move(A, C);
Hanoi(n - , B, A, C);
} }
public static void Move(char startPlace, char endPlace)
{
Console.WriteLine("Move {0} To {1}",startPlace,endPlace);
}

4.一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少

1)递归算法实现

Console.WriteLine(Foo());
}
public static int Foo(int i)
{
if (i <= )
return ;
else if (i > && i <= )
return ;
else return Foo(i - ) + Foo(i - );

2)for 循环

   int a = , b = , c = ;
for (int j = ; j <= ; j++)
{
c = a + b;
a = b;
b = c;
}
Console.WriteLine(c);

3)while 循环

 int a = , b = , c = ;
int k = ;
while (k<=)
{
c = a + b;
a = b;
b = c;
k++;
}
Console.WriteLine(c);

20160422 --Switch…case 总结; 递归算法的更多相关文章

  1. Android Studio快捷键switch case 轻松转换为if else

    Android Studio快捷键switch case 轻松转换为if else 今天碰到的问题,没有找到资料,后面找到了方法,这个记下来,转载请注明出处:http://www.cnblogs.co ...

  2. java中的switch case

    switch-case语句格式如下 switch(变量){ case 变量值1: //; break; case 变量值2: //...; break; ... case default: //... ...

  3. 为什么说在使用多条件判断时switch case语句比if语句效率高?

    在学习JavaScript中的if控制语句和switch控制语句的时候,提到了使用多条件判断时switch case语句比if语句效率高,但是身为小白的我并没有在代码中看出有什么不同.去度娘找了半个小 ...

  4. c语言基础表达式, 关系运算符, 逻辑运算符, 位运算符, 数据的取值范围, 分支结构(if...else, switch...case)

    1.表达式: 表达式的判断是有无结果(值), 最简单的表达式是一个常量或变量, 如:12, a, 3 + 1, a + b, a + 5 都是表达式 2.BOOL(布尔)数据类型: c语言中除了基本数 ...

  5. 运算符 与 分支语句:if ,else if,else;switch case

    分支语句: if        else if       else      :    switch          case --如何使用 if  else if  else: Console. ...

  6. switch...case和if...else if的判断应用

    判断成绩所属等级的 两种方法 1...      switch...case方法: #include<stdio.h> int main(void) { ;i <= ;++i) // ...

  7. go语言选择语句 switch case

    根据传入条件的不同,选择语句会执行不同的语句.下面的例子根据传入的整型变量i的不同而打印不同的内容: switch i { case 0: fmt.Printf("0") case ...

  8. 简谈switch case

    工作中从buff里截取了一个字符串,然后和配置文件中的字符串名字对比 ,如果一样,处理,不一样,elseif 再判断,再处理! switch(){case : case :...... }先说语法,再 ...

  9. 用Dictionary替换switch case

    用switch case处理一个很长的判断,例如56个民族01代表汉族,02代表藏族,03代表壮族...,当传入数字想获取民族名称时就得写56个case,当传入民族获取背后的数字时,又得再写56个ca ...

随机推荐

  1. shell脚本中处理 路径中中文和空格方法

    OLDIFS=$IFS IFS=$'\n' #存放路径的变量在引用时都使用双引号括起来 "$VAR_PATH" #路径拼接时后续的旧不需要加双引号了"$VAR_PATH& ...

  2. 虚机下Ubuntu与Win7文件共享

    使用Samba服务实现虚机与本机的文件共享,简单的分为以下几个步骤,按部就班,so easy 1.安装smb sudo apt-get install samba sudo apt-get insta ...

  3. MapReduce源码分析之作业Job状态机解析(一)简介与正常流程浅析

    作业Job状态机维护了MapReduce作业的整个生命周期,即从提交到运行结束的整个过程.Job状态机被封装在JobImpl中,其主要包括14种状态和19种导致状态发生的事件. 作业Job的全部状态维 ...

  4. 更新换代----systemctl命令取代chkconfig和service

    systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起. 任务 旧指令 新指令 使某服务自动启动 chkconfig --level 3 ...

  5. plsql programming 11 记录类型

    记录类型非常类似数据库表中的行. 记录作为一个整体本身并没有值, 不过每个单独成员或字段都有值, 记录提供了一种把这些值当做一组进行操作的方法. 例如: 1: -- create a table 2: ...

  6. Python 爬虫实战2 百度贴吧帖子

    爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的任意帖子进行抓取 指定是否只抓取楼主发帖内容 将抓取到的内容分析并保存到文件 1.URL格式的确定 首先, ...

  7. caffe net 可视化工具,,层特征可视化

    1.只用网络在线结构绘制可视化网络模型 http://ethereon.github.io/netscope/#/editor 将对应的网络输入到里面,然后按shift+enter即可查看对应的网络结 ...

  8. 《TP5.0学习笔记---配置篇》

    参考博客:http://blog.csdn.net/self_realian/article/details/75045541

  9. SSH后台管理系统,实现查询+分页

    一个搜索框,然后会获取大量信息,将信息进行分页,每一页显示固定条数. mysql中使用“like”和“%%”进行模糊匹配,用“limit”进行分页. 1.首先创建一个页面信息的实体类,代码如下: im ...

  10. ADO.NET详细学习笔记《一》

    目录 ADO.NET和ADO的区别 ADO.NET的五大核心对象 Connection对象 Command对象 DataAdapter对象,DataSet对象 DataReader对象 [1]ADO. ...