在学习时碰到了递归的讲解,将理解思路记录。
代码:
using System;
namespace CalculatorApplication
{
class NumberManipulator
{
public int factorial(int num)
{
/* 局部变量定义 */
int result;
if (num == 1)
{
return 1;
}
else
{
result = factorial(num - 1) * num;
return result;
}
}
static void Main(string[] args)
{
NumberManipulator n = new NumberManipulator();
//调用 factorial 方法
Console.WriteLine("6 的阶乘是: {0}", n.factorial(6));
Console.WriteLine("7 的阶乘是: {0}", n.factorial(7));
Console.WriteLine("8 的阶乘是: {0}", n.factorial(8));
Console.ReadLine();
}
}
}
该段代码是用来计算输入数字的阶乘,
在传入一个6时,不等于1,进入else,减一,传入5,第二次调用;
第二次调用不等于1,进入else,减一,传入4,第三次调用;
第三次调用不等于1,进入else,减一,传入3,第四次调用;
第四次调用不等于1,进入else,减一,传入2,第五次调用;
第五次调用不等于1,进入else,减一,传入1,第六次调用;
第六次调用等于1,return 1 ,
递归不下去了,得到了最终的结果为1,开始网上继续计算未完成的步骤(即:*num)
第五次调用得到第六次的结果为1 *num,当前为2,得到结果result 为2;
第四次调用得到第五次的结果为2 *num,当前为3,得到结果result 为6;
第三次调用得到第四次的结果为6 *num,当前为4,得到结果result 为24;
第二次调用得到第三次的结果为24*num,当前为5,得到结果result 为120;
第一次调用得到第二次的结果为120 *num,当前为6,得到结果result 为720;
至此整个递归结束