用函数的递归调用求a的n次方。C语言
时间: 2024-02-09 08:07:55 浏览: 31
可以使用以下递归函数来计算 a 的 n 次方:
```c
double power(double a, int n) {
if (n == 0) return 1;
if (n == 1) return a;
if (n < 0) return 1 / power(a, -n);
double half = power(a, n / 2);
if (n % 2 == 0) return half * half;
else return half * half * a;
}
```
这个函数会根据指数的正负和奇偶性来进行递归计算,如果指数为 0,返回 1;如果指数为 1,返回底数;如果指数为负数,返回 1 除以正数幂的结果;否则,将指数拆成两个相等的部分,分别计算后再相乘,如果指数为奇数,则还需要额外乘以一个底数。
相关问题
用C语言编写递归函数求x的n次方, 并调用此函数求2的5次方。
以下是用C语言编写递归函数求x的n次方的代码:
```c
#include <stdio.h>
double power(double x, int n) {
if (n == 0) {
return 1;
} else if (n % 2 == 0) {
double y = power(x, n / 2);
return y * y;
} else {
double y = power(x, (n - 1) / 2);
return x * y * y;
}
}
int main() {
double result = power(2, 5);
printf("2的5次方等于%.0f\n", result);
return 0;
}
```
在这个递归函数中,如果n等于0,返回1;如果n是偶数,返回x的n/2次方的平方;如果n是奇数,返回x乘以x的(n-1)/2次方的平方。这个函数的时间复杂度是O(log n),因为每次递归都将n减半,所以最多需要递归log n次。
在main函数中,我们调用了power函数,求2的5次方,得到结果32。
在C语言中用递归求x的n次方
下面是C语言中用递归求x的n次方的代码:
```c
#include<stdio.h>
double power(double x, int n){
if(n == 0) //x的0次方为1
return 1;
if(n == 1) //x的1次方为x
return x;
if(n < 0) //如果n为负数,则返回1除以x的-n次方
return 1 / power(x, -n);
else{
double res = power(x, n/2); //先计算x的n/2次方
if(n % 2 == 0) //如果n为偶数
return res * res;
else //如果n为奇数
return res * res * x;
}
}
int main(){
double x = 2.5;
int n = 4;
printf("%.2f的%d次方为%.2f\n", x, n, power(x, n));
return 0;
}
```
在这个程序中,我们定义了一个名为power的递归函数,用来计算x的n次方。首先判断n的值,如果n为0,则返回1;如果n为1,则返回x;如果n为负数,则返回1除以x的-n次方;否则,将问题分解为计算x的n/2次方,然后根据n的奇偶性计算x的n次方。最后,在main函数中调用power函数,并打印结果。