1:输出一个数字的每一位
void _print(int x)
{
if (x>9)
{
_print(x / 10);
}
printf("%d ", x%10);
}
1234->123+4->12+3+4->1+2+3+4
也就是先除以10,再打印%10,传参的时候传除以10,当一直递归到个位数的时候,直接跳出循环,打印这个个位数。
2:输出一个数字的每一位之和
int _sum(int x)
{
int ret = 0;
if (x > 9)
{
return _sum(x / 10)+(x%10);
}
else
return x;
}
思路便是,先打印末尾数,然后传参传x/10,不断打印末尾数,并且相加。
一直到这个数字变为一位数的时候,直接返回该数字就行。
3:逆序数组(不是逆序打印)
1:普通函数实现逆序数组
void invert(char x[],int sz)
{
int left = 0;
int right = sz - 1;
while (left < right)
{
int tmp = x[left];
x[left] = x[right];
x[right] = tmp;
left++;
right--;
}
}
int main()
{
char a[10] = { 0 };
scanf("%s", a);
int sz = strlen(a);
invert(a,sz);
printf("%s", a);
}
也就是第一个元素和最后一个元素互相交换,完成逆序。这是普通函数方式
2:单参数递归方式实现逆序数组
#include<stdio.h>
#include<string.h>
//打印一个数字的每一位
void invert(char* str)
{
int len = strlen(str);
char tmp = *str;
*str = *(str + len - 1);
*(str + len - 1) = '\0';
if (strlen(str+1) >= 2)
{
invert(str+1);
}
*(str+len-1) = tmp;
}
int main()
{
char a[10] = { 0 };
scanf("%s", a);
int sz = strlen(a);
invert(a);
printf("%s", a);
}
一共这样几步
1:将数组第一个元素存放到临时变量tmp中
2:数组最后一个元素存放到数组第一个元素中
3:数组最后一个元素变为\0
4:第一个元素和\0之间的数组进行逆序
5:数组最后一个元素变为tmp(也就是和第一步对应交换首尾元素)
3:多个参数递归方式逆序数组
void invert(char str[],int left,int right)
{
char tmp = str[left];
str[left] = str[right];
str[right] = tmp;
left++;//注意++和--要放在前面,放在后面不一定执行;
right--;
if(left < right)
invert(str, left, right);
}
int main()
{
char a[10] = { 0 };
scanf("%s", a);
int left = 0;
int sz = strlen(a);
int right = sz - 1;
invert(a,left,right);
printf("%s", a);
}
类似于1:实现
4:实现n的k次方
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", ret);
}
这些代码,虽然写起来简单,但是在最初写的时候,还是花了不少心思。我也会不断的温习这些代码,希望看到本篇博客的朋友们可以一起进步,一起学习。