递归:函数调它用自己的过程。
递归与循环对比
代码通过实现计算从1到输入n的时间来对比
N的值 | 循环时间 | 递归时间 |
100 | 0.06 | 0.03 |
1000 | 0.42 | 0.46 |
10000 | 2.90 | 2.90 |
100000 | 5.92 | //不工作 |
由于时间主要浪费在打印输出上,所以对比并不强烈。但是当N的值达到100000时程序已经不能运行了。这是由于递归的调用方式造成的。递归的每次函数调用都会返回一次,当函数执行完毕后,控制权被传回上一级递归,而且程序按照逐级返回,不能跳级返回。递归中位于递归调用之前的语句按被调函数的顺序执行,位于递归调用之后的语句按照与背调函数相反的顺序执行。虽然每次递归都会创造自己的新变量,但是递归自己并不能储存拷贝,所以每次递归调用就相当于又从头开始执行函数的代码。
递归就像这样
递归就像这样,在程序中一层一层的打开,最后在逐层返回。这样在实际处理问题中就会造成很大麻烦。从这也可以看出,递归很类似于循环,除了递归的每次调用都需要创建变量。所以二者实际上可以替换。
总结:
可以使用循环的地方通常可以使用递归 ,二者各有用处,递归代码简洁清晰,但是运算效率较低,次数过多容易造成栈溢出等现象。所以虽然循环不能解决所有问题,但是循环速度快,结构简单。如果能简单使用循环解决问题,就尽量不使用递归。