理解递归

递归的基本思想就是:把问题分解成为规模更小的、具有与原问题有着相同解法的问题。
(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 =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值