函数递归自己写出来难度较大,今天呈现几个有代表性的题目:
1.递归和非递归分别实现求n的阶乘(不考虑溢出的问题)
无递归
void jiecheng(int n)
{
int i = 0;
int ret = 1;
for(i = 1;i<=n;i++)
{
ret = ret * i;
}
printf("%d", ret);
}
int main()
{
int n = 0;
scanf("%d", &n);
jiecheng(n);
return 0;
}
有递归
int fac(int n)
{
if (n <= 1)
{
return 1;
}
else
{
return n * fac(n - 1);
}
}
int main()
{
int ret = 0;
int n = 0;
scanf("%d", &n);
ret = fac(n);
printf("%d", ret);
return 0;
}
2.?递归和非递归分别实现strlen
无递归
int my_strlen(char* s)
{
int count = 0;
while (*s != '\0')
{
count++;
s++;
}
return count;
}
int main()
{
char arr[] = "qwofghbaohgboahgoihgoher";
int len = my_strlen(arr);
printf("%d", len);
return 0;
}
递归?
int my_strlen(char* s)
{
if (*s == '\0')
{
return 0;
}
else
{
return 1 + my_strlen(s + 1);
}
}
int main()
{
char arr[] = "erohigrwnger0hbnebheqpbnqei";
int len = my_strlen(arr);
printf("%d", len);
return 0;
}
?计算一个数的每位之和(递归实现) 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和 例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19 输入:1729,输出:19
int DigitSum(int n)
{
if (n <= 9)
{
return n;
}
else
{
return n % 10 + DigitSum(n / 10);
}
}
int main()
{
int num = 0;
scanf("%d", &num);
int shu = 0;
shu = DigitSum(num);
printf("%d", shu);
return 0;
}
?递归实现n的k次方
int cifang(int n,int k)
{
if(k>0)
{
return cifang(n,k - 1)*n;
}
return 1;
}
int main()
{
int n = 0;
printf("请输入一个数");
scanf("%d", &n);
printf("请输入这个数的k次方");
int k = 0;
scanf("%d", &k);
int num = 0;
num = cifang(n,k);
printf("%d", num);
return 0;
}
|