一、此次学习小结
1.斐波那契数列
1.用递归的方法,计算量太大
int fib(int n)
{
if (n <= 2)
return 1;
else
return fib(n - 1) + fib(n - 2);
}
2.不用递归,也叫迭代
int fib(int n)
{
int a = 0;
int b = 1;
int c = 1;
while (n > 2)
{
n = n - 1;
a = b;
b = c;
c = a + b;
}
return c;
}
递归确实好,但是有时候也要看计算量的大小。
1. 许多问题是以递归的形式进行解释的,这只是因为它比非递归的形式更为清晰。
2. 但是这些问题的迭代实现往往比递归实现效率更高,虽然代码的可读性稍微差些。
3. 当一个问题相当复杂,难以用迭代实现时,此时递归实现的简洁性便可以补偿它所带来的运行时开 销。
2.使用递归计算字符长度,不使用临时变量
//不用递归方法
int m_strlen2(char* arr)
{
int count = 0;
while (*arr != '\0')
{
count++;
arr++;
}
return count;
}
//使用递归
int m_strlen1(char* arr)
{
if (*arr != '\0')
{
return 1 + m_strlen1(arr + 1);
}
else
return 0;
}
int main()
{
char arr[] = "abcd";
int c = m_strlen2(arr);
printf("%d\n", c);
return 0;
}
二、此次学习收货
感受:现在感觉越来越难了,感觉自己脑子不够用了,害。
展望:好好学习,坚持住