如何快速的书写递归算法

递归介绍:
递归是一种非常简便,而且用起来很舒服的一种算法。它是以调用本身来实现对某个规律分段数学函数进行计算的。因此,绝大部分的数学函数都能改写成递归算法。只要分段数学函数是具有某种规律的,几乎都能写成递归函数。而对于非分段函数来说,若具有某种规律,也可以改写成分段函数。
递归三要素:
1.最重要的要素:递归表达式。其实也可以说成函数表达式。
2.递归出口。所谓的递归出口,便是递归到某处的时候,该递归算法便不再计算下去了。
3.递归返回值。这个很好理解,就是要返回的值。

我用两个实例教大家使用递归算法,一个是出名的斐波那契数列,另一个就随机举例把函数算法改成递归算法。

实例一:斐波那契数列。
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
我们首先来思考,并列出数学函数:
设某月为n,某月兔子数量为f(n);
由此可以得到数学表达式:
f(n)=1,n=1;
f(n)=2,n=2;
f(n)=f(n-1)+f(n-2),n>=3.

这上面的表达式是一个典型的分段函数,且具备规律,则上述函数可以改写成递归函数。下面就一步步的来书写这个递归函数:
第一步:确定递归表达式,由于我们上面已经写好了,这里便不再书写了。
第二步:书写递归出口。递归出口便是不能再参与递归循环的那部分函数自变量值和因变量值。这里便是当n=1和n=2时的函数自变量和因变量值。
第三步:递归返回值。这里的递归返回值也就是指递归函数中的return部分的内容,也就是具备关系部分的内容。

因此该递归函数可以写成:
int fn(int n)
{
if(n == 1)
return 1;
else if(n==2)
return 2;
else
return fn(n-1)+fn(n-2);
}
这个递归函数变被写好了,下面我们在举个公差为2的等差数列函数改写为递归函数。

举个很熟悉的等差数列:1 3 5 7 9 11,…
数列表达式为an=2*n-1;(n为正整数)
它的前n项和为:sn=n * n;

这里可以第n项an改写成:
an=1,n=1;
an=sn-s(n-1),n>2;

由此,上述表达式具备某种规律,且是分段函数,且有不循环部分,因此,这个函数可以改写成递归函数,则:
第n项的递归函数:
int an(int n)
{
if(n== 1)
return 1;
else
return an(n-1)+2;//第n项就是前n-1项+公差;
}
前n项和的递归函数:
int sn(int n)
{
if(n==1)
return 1;
else
return sn(n-1)+(2*n-1);
}

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值