本篇为作者学习C语言过程中遇到的一些值得多次学习的题目。
给相同新学习C的朋友们分享。
目录
- 使用函数递归方式实现打印一个整数的每一位
- 递归和非递归分别实现求n的阶乘(不考虑溢出的问题)
- 编写一个函数实现i的k次方,使用递归实现。
- 递归和非递归分别模拟strlen的实现
-
使用函数递归方式实现打印一个整数的每一位
#includevoid print(unsigned int n) { if (n > 9) print(n / 10); printf("%d ", n % 10); } int main() { int n = 0; scanf("%d", &n); print(n);//函数 return 0; }
-
递归和非递归分别实现求n的阶乘(不考虑溢出的问题)
非递归方法
int main()
{
int n = 0;
int i = 0;
int input = 1;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
input = input * i;
}
printf("%dn", input);
}
递归方法
int fac(int n)
{
if (n > 1)
return n * fac(n - 1);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = fac(n);
printf("%dn", ret);
return 0;
}
-
编写一个函数实现i的k次方,使用递归实现。
#include//输入i, k int Pow(int i, int k) { if (k == 0) { return 1; } else if(k>0) { return i * (Pow(i, k - 1)); } else { return 1.0 / (Pow(i, -k)); } } int main() { int i = 0; int k = 0; scanf("%d%d", &i, &k); double ret = Pow(i, k); printf("%lfn", ret); return 0; }
-
递归和非递归分别模拟strlen的实现
非递推法
int my_strlen(char *str)
{
int count = 0;
while(*str !=' ')
{
count++;
str++;
}
return count;
}
int main()
{
char arr[] = { "abcdefg" };
int len = my_strlen(arr);
printf("%dn",len);
return 0;
}
使用函数递推法
int my_strlen(char * str)
{
if (*str != ' ')
return 1 + my_strlen(str+1);
else
return 0;
}
int main()
{
char arr[] = { "abcdefg" };
int len = my_strlen(arr);
printf("%dn", len);
return 0;
}
int my_strlen(char * str)
{
if (*str != ' ')
return 1 + my_strlen(str+1);
else
return 0;
}
int main()
{
char arr[] = { "abcdefg" };
int len = my_strlen(arr);
printf("%dn", len);
return 0;
}



