递 归 可 以 是 循 环 递归可以是循环 递归可以是循环
能用循环做的,就能用递归做,在算法比赛中,一般只写递归,不写循环
循环 for (起始条件;循环终止条件;循环条件变化 ) === 》
递归:递归起始条件: func_recursive(n); ;有使递归趋于结束的语句:func_recursive(++n) ; 递归终止条件 n == 9
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 直接或是或是间接调用自己的情形,就递归调用。recursive
// 递归,是比较接近自然语言特性的一种调用方式。递归必须要用合理的出口,不然会挂掉
//循环 === 》 递归:递归起始条件:func_recursive(n) 有使递归趋于结束的语句:func_recursive(++n) 递归终止条件 n == 9
int func_recursive(int n)
{
if(n == 9)
{
printf("%d \n",n) ;
return 0;
}
else
{
printf("%d \n",n) ;
return func_recursive(++n);
}
}
int main()
{
// for循环
for (int i =0;i<10;i++) {
printf("%d \n",i) ;
}
printf("**********一样一样的*****************\n");
// 迭代
int n = 0;
int ret = func_recursive(n);
return 0;
}
递归和循环,有共同的特点,有起点,有终点,重复作同样的事情。
所以很多情况,两者是可以相互转换的。
如果上升一下理论高度,作一个重复面有明确起点和终点的事,有递归和迭代两种选择。
循环其实就是一种迭代。
递归的方式,写法比较简洁,符合正常逻辑,但代码理解难度大,内存消耗大(易导致栈溢出)
所以能用迭代(lterative)解决的问题,不要用递归来完成。