C语言 ——— 编写一个函数实现n的k次方,使用递归实现

目录

代码实现

代码验证

当k为正数时

当k为0时 

当k为负数时 

代码讲解 

函数体的讲解

代码运行时过程的讲解

当k = 0时

当k > 0时

当k < 0时


代码实现

#include<stdio.h>

double my_pow(int n, int k)
{
	if (k > 0)
		return n * my_pow(n, k - 1);
	else if (k < 0)
		return 1.0 / my_pow(n, -k);
	else
		return 1;
}

int main()
{
	//输入
	int n = 0;
	int k = 0;
	scanf("%d %d", &n, &k);

	//计算并返回
	double ret = my_pow(n, k);

	//输出
	printf("%d的%d次方 = %f", n, k, ret);

	return 0;
}

代码验证

当k为正数时

当k为0时 

当k为负数时 


代码讲解 

函数体的讲解

当k为0时:n的k次方 = 1,因为任何数的0次方都是1

return 1;

当k大于0时:n的k次方 = n * my_pow(n, k-1),因为2的3次方 = 2 * 2的2次方

return n * my_pow(n, k - 1);

当k小于0时:n的k次方 = 1.0 / my_pow(n, -k),例如 2 的 -3 次方 = 1 / 2的3次方

注意:输入k时输入的是 -3,所以要在k前面加个负号,负负得正,且等式两端至少要有一个浮点数,得出的结果才是小数,所以是1.0

return 1.0 / my_pow(n, -k);

由以上3个公式就可写出my_pow函数体,并且是以递归实现


代码运行时过程的讲解

double my_pow(int n, int k)
{
	if (k > 0)
		return n * my_pow(n, k - 1);
	else if (k < 0)
		return 1.0 / my_pow(n, -k);
	else
		return 1;
}

当k = 0时

任何整数的0次方都为1,所以不论n为几,直接返回1即可

当k > 0时

例如:n = 2,k = 2

  1. 第一次进入my_pow函数:if判断k>0,return 2 * my_pow(2, 2-1),所以要再次进入函数
  2. 进入函数时:n = 2,k = 1
  3. 第二次进入my_pow函数:if判断k>0,return 2 * my_pow(2, 1-1),所以要再次进入函数
  4. 进入函数时:n = 2,k = 0
  5. 第三次进入my_pow函数:if判断k=0,直接 return 1
  6. 回到第二次进入my_pow函数:return 2 * my_pow(2, 1-1) 中的 my_pow(2, 1-1)   替换成 1,也就是 return 2 * 1 == return 2
  7. 回到第一次进入my_pow函数:return 2 * my_pow(2, 2-1) 中的 my_pow(2, 2-1)   替换成 2,也就是 return 2 * 2 == return 4
  • 最后返回的结果也就是4,事实证明 2 的 2 次方也就是4

当k < 0时

例如:n = 2,k = -2

  1. 由 1.0 / my_pow(n, -k) 中的 -k 把 k 负负得正变为正数
  2. 变为正数后即可使用 k > 0时的方法递归
  3. 此时的n = 2,k = 2
  4. 递归结束后 1.0 除以 my_pow(n, -k) 的结果,也就是1.0 / 4 = 0.125,最后返回即可 
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值