题目1:输入一个非负整数,计算这个数的每位之和

#include<stdio.h>
int Digitsum(unsigned int num)
{
if(num>9)
{
return Digitsum(num/10) + num%10;
}
else
{
return num;
}
}
int main()
{
unsigned int num = 0;
unsigned int ret = 0;
printf("请输入数字:");
scanf("%d",&num);
ret = Digitsum(num);
printf("ret = %d\n",ret);
return 0;
}

题目2:递归实现n的k次方(注意:自定义函数尽量放在主函数前面)

#include<stdio.h>
double pow(int n,int k)
{
if(k<0)
{
return (1.0/pow(n,-k));
}
else if(k == 0)
{
return 1;
}
else
{
return n*pow(n,k-1);
}
}
int main()
{
int n = 0;
int k = 0;
double ret = 0;
printf("请输入n和k的值:");
scanf("%d%d",&n,&k);
ret = pow(n,k);
printf("ret = %lf\n",ret);
return 0;
}

题目3:把一个数组的内容逆序

#include<stdio.h>
void reverse_string(char* arr)
{
int len = my_strlen(arr);  //不用在主函数里调用了,直接定义在此函数内调用
char tmp = arr[0];
arr[0] = arr[len - 1]; 
arr[len - 1] = '\0';
if(my_strlen(arr + 1)>=2)
{
reverse_string(arr + 1);
}
arr[len - 1] = tmp;
}
int my_strlen(char* str)
{
int count = 0;
while(*str!='\0')  //是循环不是if语句
{
*str++;
count++;
}
return count;
}
int main()
{
char arr[] ="Rubby";
reverse_string(arr);
printf("arr = %s\n",arr);
return 0;
}

错误点:

1.第一题求和时,num在条件选择时-分两种情况即可(不包括num == 0)。
2.第二题注意看return返回条件的书写格式。
3.实现递归时,使用的是if条件来判断字符串大小-我写成了while循环(怎么看也看不出逻辑)。