递归的基本思想就是:把问题分解成为规模更小的、具有与原问题有着相同解法的问题。
(Recursion is the process of repeating items in a self-similar way.)
在编程中,最常用的例子就是斐波那契数列的求解,我在下列中用了4种方法,加深对递归的理解。
#include <iostream>
using namespace std;
//递归
//优点:代码及其简洁,易懂(如果理解递归的话)
//缺点:执行效率低,如果递归层数过多,会导致爆栈
int fibonacci_recursion(int num)
{
return num<2 ? 1: (fibonacci_recursion(num - 1) + fibonacci_recursion(num - 2)) ;
}
void test_fibonacci_recursion(int n)
{
int result = fibonacci_recursion(n);
cout<<"The result of fibonacci: "<<result<<endl;
}
//递归:缓存中间数据
//优点:以空间换时间,执行效率高
//缺点:额外的内存开销,数据越多需要的内存越多
int fibonacci_cache(int num, int *mem)
{
if (mem[num] == -1)
{
mem[num] = fibonacci_cache(num - 1, mem) + fibonacci_cache(num - 2, mem);
}
return mem[num];
}
void test_fibonacci_cache(int n)
{
//将所有的数据都缓存到mem中,并设置标志位
int *mem =