有关递归的知识点在:
题目1:
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
比如:
char arr[] = "abcdef"; 逆序之后数组的内容变成:fedcba
代码实现:(非递归方法)
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = "abcdef";
int sz = strlen(arr); //使用strlen函数时需要引入头文件
char *right = arr + (sz - 1); //因为数组下标的特殊性,所以需要减1
char *left = arr; //注意指针的类型是char,而不是int
while (left < right)
{
char change = *left;
*left = *right;
*right = change;
left++; //指针要想对其++,就要先为其创建一个指针变量
right--;
}
printf("%s\n", arr);
return 0;
}
注意点:
使用strlen函数时需要引入头文件
char *right = arr + (sz - 1); //因为数组下标的特殊性,所以需要减1
char *left = arr; //注意指针的类型是char,而不是int
left++; //指针要想对其 ++ 或 --,就要先为其创建一个指针变量
代码实现 (递归方法)
#include <stdio.h>
#include <string.h>
void exchange(char *str)
{
int sz = strlen(str); //注意括号里用的是形参,而不是实参
char change = *str;
*str = *(str + sz - 1);//等号俩边的顺序不可颠倒
*(str + sz - 1) = '\0';
if (strlen(str + 1) >= 2)//此时递归的条件是以字符串个数
{
exchange(str + 1);
}
*(str + sz - 1) = change; //因为交换需要俩个步骤
}
int main()
{
char arr[] = "abcdef";
exchange(arr);
printf("%s\n", arr);
return 0;
}
int sz = strlen(str);//注意括号里用的是形参,而不是实参
*str = *(str + sz - 1);//等号俩边的顺序不可颠倒
if (strlen(str + 1) >= 2)//此时递归的条件是以字符串个数
*(str + sz - 1) = change; //因为交换需要俩个步骤
题目2:
计算一个数的每位之和,
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
输入:1729,输出:19
代码实现:
#include <stdio.h>
int digitsum(unsigned int scan)
{
int first = scan % 10;
if (scan > 9) //注意这里的条件是位数
{
return first + digitsum(scan / 10);
}
else
{
return scan;
}
}
int main()
{
unsigned int data = 0;
scanf_s("%d", &data);//scanf_s函数中%d最好不要加换行符
int sum = digitsum(data);
printf("%d\n", sum);
return 0;
}
题目3:
编写一个函数实现n的k次方,使用递归实现
#include <stdio.h>
double calculation(int base,int n) //注意是double类型
{
if (n > 0)
{
return base * calculation(base, n - 1);
}
else if (n == 0)
{
return 1;
}
else if (n < 0) //不要忽略了指数可以为负数
{
return 1.0 / calculation(base, -n);
}
}
int main()
{
int base = 0;
int n = 0; //n是整数
scanf_s("%d %d", &base, &n);
double sum = calculation(base, n); //其结果必须是小数类型
printf("%lf\n", sum);
return 0;
}