1.递归
1.1编写函数,不允许创建临时变量,返回数组的长度
①有临时变量的情况
int my_strlen(char * str) // char类型的指针,指向数组的首地址
{
int count = 0;
while(*str !='\0') //如果没找到最后一个
{
str++; //指针向后移动
count++; // 计数器++
}
return count;
}
int main()
{
char arr[] = 'abc';
int len = my_strlen(arr);
printf("%d",len);
return 0;
}
②使用递归的思想
int my_strlen(char * str) // char类型的指针,指向数组的首地址
{
if(*str =='\0') //如果没找到最后一个
return 0;
else
return 1+my_strlen(str+1); //str+1 (指针向后加1)的地址
int main()
{
char arr[] = 'abc';
int len = my_strlen(arr);
printf("%d",len);
return 0;
}
1.2编写函数,求出N的阶乘
①用循环的方法
int Fac(int n)
{
int i = 0;
int ret = 1;
for (i = 1; i <= n; i++)
{
ret = ret * i;
}
}
②用递归的方法
int Fac1(int n)
{
if (n <= 1)
return 1;
else
return n * Fac(n - 1);
}
int main()
{
int n = 5;
int result = Fac1(n);
printf("%d\n", result);
return 0;
}
1.3求第N个斐波那契数
//斐波那契数: 1 1 2 3 5 8 13 21 34 55 ....
用递归的方法:会出现许多重复的计算 例如 求第50个 需要49 48 求49 需要 48 47 求48 需要47 46... 需要2^50
int Fib(int n)
{
if (n <= 2)
return 1;
else
return Fib(n - 1) + Fib(n - 2);
}
int main()
{
int n = 40;
int ret = 0;
ret = Fib(n);
printf("%d", ret);
return 0;
}
用迭代的方法
int Fib(int n)
{
int a = 1;
int b = 1;
int c = 1;
while (n > 2)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
int main()
{
int n = 40;
int ret = 0;
ret = Fib(n);
printf("%d", ret);
return 0;
}