描述:
编写一个函数实现n^k,使用递归实现.
思路:
本题对于递归使用熟练的同学来说是比较容易的。但对于不熟练的同学容易思维混乱。我们自定义函数my_pow来实现这个功能.我们主要来说递归函数的部分。
本题可以看作为n*n*n...(有k个n相乘)。利用递归的特点,每乘一次n后让k减一即可。在这里,有必要说明一下递归特点与运行方式。
首先要说明一下递归的三个要素:
1,递归的主要思考方式:把大事化小。也就是说,在思考的时候我们只需要思考一部分,比如,实现n * n * n * n,我们思考前两个相乘,如果代码正确,那么后面的相乘运行结果自然正确。
2,递归的必要条件:存在条件的限制且每次递归之后都会越来越接近这个条件。否则,会造成栈溢出问题。这个问题也是递归最常见的错误。关于什么是栈溢出,感兴趣的可以自己百度。
3,递归的思考方式和熟练需要画图来解决。
说起递归的运行步骤,刚开始很多人是不清楚它的这个过程是什么样走的,所以,在这里我先放出部分正确的代码,通过画图,一起来感受这个过程。(要注意的是:k--;单独写出来是为了说明和理解的方便(前缀++与后缀++的区别)。更加好的写法应该是去掉k--;一行,写为return n * my_pow(n, --k);若写为return n * my_pow(n, k--);会有什么样的结果? (无限死循环导致栈溢出))
完整的代码如下:
#include<stdio.h>
int my_pow(int n, int k)
{
if(k > 0)
{
k--;
return n * my_pow(n, k);
}
return 1;
}
int main(void)
{
int n = 0, k = 0;
scanf("%d %d", &n, &k);
int ret = my_pow(n, k);
printf("%d", ret);
return 0;
}
运行结果如下:


这篇博客介绍了如何使用递归函数实现整数n的k次幂。文章通过详细解释递归思路、递归的三个要素以及递归运行过程,帮助读者理解递归算法。同时,提到了递归可能导致的栈溢出问题,并通过代码示例展示了正确和错误的递归调用方式,以避免无限循环。最后,给出了一个递归实现的n^k函数示例并展示其运行结果。
1318

被折叠的 条评论
为什么被折叠?



