使用递归实现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<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;
}

        运行结果如下:

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值