参照:https://www.runoob.com/csharp/csharp-encapsulation.html
a++; ++a; a--; --a
b = a++: 先将 a 赋值给 b,再对 a 进行自增运算。
b = ++a: 先将 a 进行自增运算,再将 a 赋值给 b。
b = a--: 先将 a 赋值给 b,再对 a 进行自减运算。
b = --a: 先将 a 进行自减运算,再将 a 赋值给 b
using System;
namespace OperatorsAppl
{
class Program
{
static void Main(string[] args)
{
int a = 1;
int b;
// a++ 先赋值再进行自增运算 a = 2, b = 1
b = a++;
Console.WriteLine("a = {0}", a);
Console.WriteLine("b = {0}", b);
Console.ReadLine();
// ++a 先进行自增运算再赋值 a = 2, b = 2
a = 1; // 重新初始化 a
b = ++a;
Console.WriteLine("a = {0}", a);
Console.WriteLine("b = {0}", b);
Console.ReadLine();
// a-- 先赋值再进行自减运算 a = 0, b = 1
a = 1; // 重新初始化 a
b= a--;
Console.WriteLine("a = {0}", a);
Console.WriteLine("b = {0}", b);
Console.ReadLine();
// --a 先进行自减运算再赋值 a = 0; b = 0
a = 1; // 重新初始化 a
b= --a;
Console.WriteLine("a = {0}", a);
Console.WriteLine("b = {0}", b);
Console.ReadLine();
}
}
}
Factorial
在数学与计算机科学中,递归是指在函数的定义中使用函数自身的方法。
递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。
递归算法解决问题的特点:
(1) 递归就是在过程或函数里调用自身。
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。在实际编程中尤其要注意栈溢出问题。
借助递归方法,我们可以把一个相对复杂的问题转化为一个与原问题相似的规模较小的问题来求解,递归方法只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。但在带来便捷的同时,也会有一些缺点,也即:通常用递归方法的运行效率不高。
using System;
namespace Test {
class Dummy {
public int loop(int i) {
int result;
Console.WriteLine("i: {0}", i);
if (i == 10)
{
return 10;
}
else {
result = loop(i + 1) + i;
return result;
}
}
static void Main(string[] args) {
Dummy d = new Dummy();
Console.WriteLine("result: {0}", d.loop(6)); // result: 40
}
}
}