编写一个函数实现n的k次方,使用递归实现。
求 n 的 k 次方其实就是 k 个 n 相乘。
如果n = 2 ,k = 4, 2 的4次方等于,2 乘 2 的3次方。所以就可以用递归。当 k < 0 的时候,2 的-4 次方,就等于 1 / 2 的4 次方,就是 1 / 2 的3次方 乘 2:
double POW(int n, int k)
{
if (k > 0)
{
return n * POW(n, k - 1);
}
else if (k == 0)
{
return 1;
}
else
{
return 1.0 / POW(n, -k);
}
}
int main()
{
int n = 0;
int k = 0;
scanf("%d %d", &n, &k);
double ret = POW(n, k);
printf("%lf\n", ret);
}
因为有小数,所以用double 类型来接受。
字符串逆序(递归实现)
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印
此题就是要字符串逆序存储。
我们的思路就是用一个 left 和 right ,left 存储数组开头的下标,right 存储最后一个下标,然后他们的值互换,left + 1,right - 1 ,然后再互换,直到 left 和 right 相遇。
但是我们用递归的话:
我们假设 a b c d e f 因为 字符串最后一位是 '\0',我们可以用left 和 right 来比喻,先把最后一个字符赋值到第一个,把第一个字符存储起来,让最后的字符的位置被赋值为'\n',让中间的又形成一个字符串,再重复操作,直到里面不再是字符串。
//字符串逆序存储
void reverse_string(char* s)// 数组名是首元素地址
{
int right = strlen(s) - 1;
char tme = s[0];
s[0] = s[right];
s[right] = '\0';
if (strlen(s + 1) >= 2)
{
reverse_string(s + 1);// 因为是首元素的地址,所以 + 1 就是下一个元素的地址
}
s[right] = tme;
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s", arr);
}