递归和循环 将大量重复处理大量数据的步骤抽象成循环或递归模式,设计出可以针对不同规模解决问题的算法。 循环设计中要注意算法的效率: 循环体的特点是:“以不变应万变”。所谓“不变”是指循环体内运算的表现形式是不变的,而每次具体的执行内容却是不尽相同的。在循环体内用不变的运算表现形式去描述各种相似的重复运算。 递归设计要点: 直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。递归是一种比迭代循环更强、更好用的循环结构。只需要找出递归关系和最小问题的解。递归方法只需少量的步骤就可描述出解题过程所需要的多次重复计算,大大地减少了算法的代码量。 static void Main() { int intResult; nt intResultf; UsingRecursive myURec = new UsingRecursive();//创建自己的类对象,调用自己里面的方法。 intResult = myURec.DoFactorial(6);//调用递归的方法, intResultf = myURec.DoFactorialF(6);//条用普通循环的方法。 Console.WriteLine(“数值6 的阶乘等于{0} (递归)”, intResult);//输出显示结果 Console.WriteLine(“数值6 的阶乘等于{0} (循环)”, intResultf);//输出显示结果 Console.ReadLine(); } 数值6的阶乘等于【0】(递归) int DoFactorial(int PF)//(PF=6) { Console.WriteLine(“厉害了,我的递:” + PF);//显示“当前”/这次运行的方法的pF参数的值 if (PF == 1)//如果这次pf参数的值等于1 { Console.WriteLine(“此次result变量的值为:” + 1); return 1;//此次运行的值等于1,上层的运算就会等于1X2=2. } int result = DoFactorial(PF - 1) * PF; Console.WriteLine(“厉害了,我的递:” + PF);//和上面是一模一样的代码 //务必将这行代码取消注释,运行看结果 Console.WriteLine(“厉害了,我的g:” + result);//返回此次运行根据当前的参数值的结果的值 return result; } int DoFactorialF(int pF)//(PF=10) { int result = 1; for(int i =0; i < pF; i++) { result = result * (i+1);// result *= i;累积 } return result; }