一、概述:
要使计算机 先必须为如何完成预定的工作设计一个算法,然后再根据算法编写程序。计算机程序要对问题的每个对象和处理规则给出正确详尽的描述,其中程序的数据结构和变量用来描述问题的对象,程序结构、函数和语句用来描述问题的算法。算法数据结构是程序的两个重要方面。
算法是问题求解过程的精确描述,一个算法由有限条可完全机械地执行的、有确定结果的指令组成。指令正确地描述了要完成的任务和它们被执行的顺序。计算机按算法指令所描述的顺序执行算法的指令能在有限的步骤内终止,或终止于给出问题的解,或终止于指出问题对此输入数据无解。
通常求解一个问题可能会有多种算法可供选择,选择的主要标准是算法的正确性和可靠性,简单性和易理解性。其次是算法所需要的存储空间少和执行更快等。
算法设计是一件非常困难的工作,经常采用的算法设计技术主要有迭代法、穷举搜索法、递推法、贪婪法、回溯法、分治法、动态规划法等等。
网盘链接:http://pan.baidu.com/s/1o6EIDwm
密码:16k9
二、递归算法
一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法。
递归的能力在于用有限的语句来定义对象的无限集合。用递归思想写出的程序往往十分简洁易懂。
注意:
⑴ 递归就是在过程或函数里调用自身;
⑵ 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。
举例说明:c#通过递归/非递归方法实现斐波那契数列(Fibonacci)
1 1 using System; 2 2 using System.Collections.Generic; 3 3 using System.Linq; 4 4 using System.Text; 5 5 namespace Fibonacci 6 6 { 7 7 class Function 8 8 { 9 9 private int[] array; 10 10 public Function() 11 11 { 12 12 } 13 13 14 14 public Function(int length) 15 15 { 16 16 if (length > 0) 17 17 { 18 18 array = new int[length + 1]; 19 19 array[0] = 1; 20 20 array[1] = 1; 21 21 } 22 22 if (length == 0) 23 23 { 24 24 array = new int[1]; 25 25 array[0] = 1; 26 26 } 27 27 } 28 28 /// <summary> 29 29 /// Fibonacci数列定义为: 30 30 /// 无穷数列1,1,2,3,5,8,13,21,34,55,…… 31 31 /// ┌ 1 n=0 32 32 /// F(n)=│ 1 n=1 33 33 /// └ F(n-1)+F(n-2) n>1 34 34 /// </summary> 35 35 /// <param name="number">第几个斐波那契数</param> 36 36 /// <returns></returns> 37 37 public int Fibonacci(int number) 38 38 { 39 39 if (number <= 1) 40 40 { 41 41 return 1; 42 42 } 43 43 else 44 44 { 45 45 return Fibonacci(number - 1) + Fibonacci(number - 2); 46 46 } 47 47 } 48 48 /// <summary> 49 49 /// 动态规划思想: 50 50 /// 1.自底向上非递归算法 51 51 /// </summary> 52 52 /// <param name="number"></param> 53 53 /// <returns></returns> 54 54 public int BottomUpNotRecursion(int number) 55 55 { 56 56 int copynumber = 0; 57 57 if (number < 2) 58 58 { 59 59 copynumber = 1; 60 60 } 61 61 else 62 62 { 63 63 int one = array[0]; 64 64 int two = array[1]; 65 65 for (int i = 2; i < array.Length; i++) 66 66 { 67 67 array[i] = one + two; 68 68 one = two; 69 69 two = array[i]; 70 70 copynumber = array[i]; 71 71 } 72 72 } 73 73 return copynumber; 74 74 } 75 75 76 76 /// <summary> 77 77 /// 2.自顶向下递归算法 78 78 /// </summary> 79 79 /// <param name="number"></param> 80 80 /// <returns></returns> 81 81 public int TopDownRecursion(int number) 82 82 { 83 83 if (number <= 2) 84 84 { 85 85 if (number == 0) 86 86 return array[0]; 87 87 if (number == 1) 88 88 return array[1]; 89 89 if (number == 2) 90 90 return array[2] = array[0] + array[1]; 91 91 } 92 92 else 93 93 { 94 94 //递归只是一个“牵引线”,目的是为了让数组储存值。 95 95 TopDownRecursion(number - 1); 96 96 array[number] = array[number - 1] + array[number - 2]; 97 97 } 98 98 return array[number]; 99 99 } 100 100 } 101 101 }
三、游戏中跟踪弹的算法
http://game.ceeger.com/forum/read.php?tid=3919
四、车辆性能算法
五、赛车漂移算法
浙公网安备 33010602011771号