撞坑总结:
除了void外其他所有递归方法的任何判定条件(if else switch)的里面和外面都得返回一个合理的值,不然会报错“不是所有的输出都能返回一个具体的值”
输入一个数字后在return中依次调用方法往下减,减到等于1的时候让他直接返回这个方法(函数)为1的值,之后整个程序自动回退,此为递归
在递归第一次return的时候,这个return并没有 真正的执行,而是撞到了里面规定的方法(函数),继续循环,而当他撞到if 里面没有再让他进方法的return后,才会真实的后撤,并且return
static int Factorial(int num)
{
if (num == 1)
{
return Factorial(1);
}
return num * Factorial(num - 1);
}
static void FactorialSum( int i = 1, long sum = 0)
{
if (i > 10)
{
Console.WriteLine("累乘再累加后的值为:" + sum);
return;
}
sum += Factorial(i);
i++;
FactorialSum( i, sum);
}
static int FactorialSum(int num = 10)
{
if (num == 1)
{
return Factorial(1);
}
return Factorial(num) + FactorialSum(num - 1);
}
短路不止可以用在逻辑判断的if switch里,也可以用来判断方法是否执行
比如
return true || 方法();【注意这个方法返回值需要是布尔】
只要满足条件方法就不会执行了