C#高手解答 递归

来源:百度知道 编辑:UC知道 时间:2024/06/01 18:25:03
protected void Page_Load(object sender, EventArgs e)
{
int a = fun(3);
Response.Write(a);
}
private int fun(int a)
{

if (a == 1)
{
return a;
}
else
{
a = a * fun(a - 1);
return a;
}
}
C#代码 为什么return a 了以后 还执行 而最后输出的是6呢 小弟菜鸟请高手说的详细点!

你学过求导吧,这里可以用同样的思想来理解,会变得容易。
fun(3),这时候3肯定是不等于1了,这里执行else里的语句,
a = 3 * fun(3 - 1)
这里有调用了fun(2),你可以把这里的fun(2)看做是一个变量b,
那就变成a = 3 * b 这样的形式,那b = 多少呢,
b = fun(2) = 2 * fun(2 - 1)
这里的fun(1)也可以看做是新的变量c,
c = fun(1)
因为给fun()的参数已经是1了,所以执行return语句,返回1,你就可以看做是变量c求出值了,是1.
然后代入到b中,
b = 2 * 1, b = 2,
再把b代入a中,
a = 3 * 2, a = 6,

明白了吗。

程序没有问题,
第一步得3*fun(2)
第二步得3*2*fun(1)
第三步得3*2*1如果就是6

a = a * fun(a - 1);
return a;
不要return a 直接retrun就可以了

这不是求阶层的么?那3的阶层可不是3×2×1=6么?

没有问题吧?