有么有大牛 表达能力强的给我讲下递归啊 是在看不懂他怎么执行的?跳来跳去
static string Test(int i)
{
if (i == 10)
{
return i.ToString();//①
}
else
{
Test(++i);
return i.ToString();//②
}
}
Console.WriteLine(Test(1)); 结果居然是2,
1.为什么第①出 return不跳出?
2.当满足条件后执行else的 ② 为什么他也不出去,++居然成了--了 ,还有他为什么减到2才执行完?条件在哪里
不单单是这个例子 就大牛们帮忙解释下关于递归或许更麻烦的例子
我就是不懂递归的原理,请教原理啊,单次的计算结果不能让我明白什么
哪里有变成"--",就是"++ "啊,只是你接收的只是Test(1);的值而已,它每个值都计算了,你没有接收而已,你在下面再写个Console.WriteLine(Test(2));//它就会输出3,只要你接收它,他都会输出的,你要是真想看它的调用可以用下面的代码:
class Program
{
static void Test(int i)
{
if (i == 10)
{
return ;//①
}
else
{
Test(++i);
Console.WriteLine(i.ToString());//②
}
}
static void Main(string[] args)
{
int i = 1;
Test(i);
Console.ReadKey();
}
}
//输出结果:10,9,8......2;
递归算法解决问题的特点:
(1) 递归就是在过程或函数里调用自身。
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。
1、不是最外层当然不会跳出
2、跟上面原因一样,不是最外层就不会跳出,所以i先加到10后一层层的返回,直到最外层,最外层的i只执行了一次++,所以最后是2
static string Test(int i) { if (i == 10) { return i.ToString(); } else { return Test(++i); } }
修改成上面的代码,你看下运行结果。
这个才是常规的递归调用。
不能说你写的 代码不递归,而是。。。你没理解递归的本质。除了递归外,还有一个叫迭代的东西,很类似递归。
参考文档:递归与迭代_百度文库
你要把程序想成一个模板,每次调用Test都有一个新的Test方法在执行,每次的return只是从当前的test中跳出,每个test之间是没有关系的。