c语言递归和循环的区别

#include <stdio.h> int pow2(int b, int n); int main() { int c = pow2(3, 2); printf("%d\n", c); return0; } int pow2(int b, int n) { if (n <= 0) return1; return pow2(b, n-1) * b; } 这个递归和循环区别在哪啊 为啥(b, n-1) =3 我想知道的是得出这个结果的过程

第1个回答  2019-02-09
递归是函数体中调用自己,如果不加控制,将无休止的调用自己,直到堆栈溢出。循环是反复执行某一段区域内的代码,如果不加控制,就会形成死循环。所以不管是递归还是循环,都要设定一定的条件,以结束递归或循环。
实际问题中,有一些问题是递归的,这样的问题使用递归程序解决感觉会自然些,程序也会简单些,但是,递归要经常调用函数,开销(内存、时间)大,有些问题就不适宜使用,循环不需要调用自身,甚至可以不调用函数,效率高,不过,要将递归问题改成非递归,可能就要动动脑筋。
上例中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
=
0

此时
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

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网