栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

使用递归实现n^k C语言

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用递归实现n^k C语言

描述:

编写一个函数实现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

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;
}

        运行结果如下:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429365.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号