接上一天,练习2:编写函数不允许创建临时变量,求字符串的长度。
实现方式1:
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char arr[] = "bit";
//['b']['i']['t']['\0']
//模拟实现strlen
printf("%d\n", my_strlen(arr));
return 0;
}
这种可以实现,但是我创建了临时变量count!那么不创建这个count的方法怎么做?用递归方法求解:
my_strlen(”bit”)
1+ my_strlen(”it”)
1+1+ my_strlen(”t”)
1+1+1+ my_strlen(””)=3
代码如下:
int my_strlen(char* str)
{
if (*str != '\0')
return 1 + my_strlen(str + 1);
else
return 0;
}
int main()
{
char arr[] = "bit";
//['b']['i']['t']['\0']
//模拟实现strlen
printf("%d\n", my_strlen(arr));
return 0;
}
运行结果
练习3:求n的阶乘
非递归:
int main()
{
int n = 0;
scanf("%d", &n);
int i = 0;
int ret = 1;
for (i = 1;i <= n; i++)
{
ret = ret * i;
}
printf("%d\n", ret);
return 0;
}
循环的方法可以做出,迭代。
下面用递归的方法写,完全可以参考上面那个练习里的方法写,如果判断大于1就return一个本身乘以减一的函数。一直return到最后参数减为1判断进入else,return1。
int Fac(int a)
{
if (a > 1)
return a * Fac(a - 1);
else
return 1;
}
int main()
{
int n = 0;
scanf("%d", &n);
printf("%d\n", Fac(n));
return 0;
}
试一下!
Ok没毛病!