关于递归函数


递归函数概念

递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。递归函数必须有结束条件。
当函数在一直递推,直到遇到墙后返回,这个墙就是结束条件。
所以递归要有两个要素,结束条件与递推关系

以求2的63次方等比数列程序为例

关于递归函数_第1张图片
由该程序,利用递归,从2的63次方开始不断递减直到x==1,这里就比较好理解递归的特点,递归不断调用自己函数
p(63)=pow(2,63)+p(62);
p(62)=pow(2,63)+p(61);

p(2)=pow(2,1)+p(1)
当p(1)的时候返回1;
注意此时并不是直接返回,这里是递归和迭代的不同之处,迭代是不断地连续进行,直到循环结束输出结果,而递归是先调用自己函数找到循环结尾,再从结尾的结果不断赋值直到最开始的递归的入口。
关于递归函数_第2张图片
这其中也可以利用采用让另一个变量是不断的乘以2,不过这里得注意因为变量n是2的x次方,这里要注意数据溢出问题,因为整型数据是达不到2的63次方这么多位数的,所以得采用double型。
这个和刚刚那个方法比较:这个方法存储数据得占用较大的内存,而运行结果较快,另一个直接调用math函数库里的pow不占内存,不过执行时间比那个方法长。

常规方法

这个最常规的方法是直接利用for语句循环得到结果,或者利用等比数列求和的方法得到结果都较为简便。这里是想换一种思路,利用递归来实现,希望可以有利于大家理解递归函数。
关于递归函数_第3张图片

你可能感兴趣的:(C语言)