1.
代码实现:
/// <summary> /// 递归求阶乘 /// </summary> /// <param name="n"></param> /// <returns></returns> public static int Func(int n) { if (n == 1) { return 1; } else { return n * Func(n - 1); } }
递归与栈
栈:是限定仅在表尾进行插入或删除操作的线性表。
函数递归是利用系统中栈进行操作的,通过对栈帧的一系列操作,从而实现递归。这个过程是由系统来完成的。
看下图,比如n=4,第一次是将func(4)放入栈中,同理依次放入栈中,栈是先进后出,现在是func(1)函数在最上面,需要注意的是此时n=1,就会直接退出func方法,通过return会离开方法的方法体的范围,对于栈中的数据来说,离开了方法体的范围,对应的数据就会从栈中移除,所以func(1)函数移出,同时算出结果为1,同理依次移出,最终结果为:1*2*3*4=24。
其实普通函数和递归函数也是一样的,普通方法内部调用另一个方法,内部都是利用栈进行操作的。