循环和函数递归c语言 循环递推c语言

c语言递归和循环的区别递归是函数体中调用自己,如果不加控制 , 将无休止的调用自己,直到堆栈溢出 。循环是反复执行某一段区域内的代码,如果不加控制 , 就会形成死循环 。所以不管是递归还是循环 , 都要设定一定的条件,以结束递归或循环 。
实际问题中 , 有一些问题是递归的,这样的问题使用递归程序解决感觉会自然些,程序也会简单些,但是 , 递归要经常调用函数,开销(内存、时间)大,有些问题就不适宜使用,循环不需要调用自身 , 甚至可以不调用函数,效率高,不过,要将递归问题改成非递归,可能就要动动脑筋 。
上例中pow2
函数实现部分指数计算功能,(b,
n-1)
=3
这个提法有问题,因为递归调用时,在返回之前系统堆栈上有一大堆(从第一次调用知道条件满足时的次数)的该递归函数,条件满足后这一系列的函数依次返回 。上述函数运行过程是这样的:
执行主函数的
pow2(3,
2);
后:
1:
b
=
3
n
=
2
此时
n
0;
pow2
调用自身(即递归调用):
pow2(b,
n-1)
*
b
后:
2:
b
=
3
n
=
1
此时
n
0;
pow2
调用自身(即递归调用):
pow2(b,
n-1)
*
b
后:
3:
b
=
3
n
=
此时
n
=
0,
if
(n
=
0)
条件满足
1;
递归函数第一次(函数最后依次递归调用)返回 , 值为
1
4:
上一次
pow2(b,
n-1)
返回值为
1,return
pow2(b,
n-1)
*
b;
所以本次(第2次)返回
3
5:
上一次
pow2(b,
n-1)
返回值为
3,return
pow2(b,
n-1)
*
b;
所以本次(第1次)返回
9
6:
函数main得到
pow2
的返回值
9
C语言中的循环与函数的递归调用有何区别?循环与递归的本质区别在于内存的使用上,递归是方法调用方法本身,而随着递归的次数的增加,内存的消耗也是不断增长,而在我们写代码时 , 内存是一个很重要的部分,我们尽量都是减少内存的消耗 , 以免造成对系统资源的浪费 , 循环占用的内存很少 , 每次循环都会释放之前分配的内存 , 但是很多递归的功能是不能用循环实现的,这就要考虑你要实现的功能了,如果非递归不可完成的功能,我们也不会刻意更改 。
c语言编程问题,循环+递归int count = 0;
void a( void)
{
?0?2count++;
?0?2if ( count100 )
?0?2a();// 如果count100, 调用自己 。一直到100就停止!不过递归多了耗尽堆栈会崩溃!
}
递归算法:是一种直接或者间接地调用自身的算法 。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解 。
递归算法的特点
递归过程一般通过函数或子过程来实现 。
递归算法:在函数或子过程的内部,直接或者间接地调用自己的算法 。
递归算法的实质:是把问题转化为规模缩小了的同类问题的子问题 。然后递归调用函数(或过程)来表示问题的解 。
递归算法解决问题的特点:
(1) 递归就是在过程或函数里调用自身 。
(2) 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口 。

推荐阅读