递归算法

                      **一,递推算法概述:**

和枚举算法相比,递推算法就比较“聪明”了,递推算法能通过已知某个条件,利用特定的关系得出中间推论,
然后逐步递推,直到得到结果为止。
由此可见,递推算法要比枚举算法“聪明”,它不会"一根筋"的寻找每一种可能方案。
1)顺推法:从已知条件出发,逐步推算出要解决的方法。例如裴波那契数列就可以通过顺推法不断推算出新的数据。
(2)逆推法:从已知的结果出发,逐步推算出要解决的问题,即顺推法的逆过程。
斐波那契数列可以说是典型的逆推法,斐波那契数列,又称黄金分割率,指的是这样一个数列,1.1.2.3.5,,,,,,,,在数学上,斐波那契数列被以下递归的式子所定义,F(0)=0,
F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
下面来个递归算法的例子:
一个由正整数构成的三角形,从三角形的顶部到底部有多条不同的路径。
对于每条路径,把路径上面的数加起来可以得到一个和,和最大的路径称为最佳路径。你的任务就是求出最佳路径上的数字之和。
注意:路径上的每一步只能从一个数走到下一层上和它最近的下边(正下方)的数或者右边(右下方)的数。
输入第一行为三角形高度h,同时也是最低边层数字的数目:
从第二行开始,每行为三角形相应行的数字,中间用空格分隔。
输出最佳路径的长度数值。
样例输入:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
样例输出:
30
代码如下

#include<cstdio>
#include<iostream>
#include<cstring>
inline int max(int a,int b) {
 return a>b?a:b;
}
int main() {
 int n,d[110][110]= {0};
 cin>>n;
 for(int i=1; i<=n; i++)
  for(int j=1; j<=i; j++)
   cin>>d[i][j];
 for(int i=n; i>=1; i--)
  for(int j=i; j>=1; j--)d[i][j]+=max(d[i+1][j],d[i+1][j+1]);
 cout<<d[1][1]<<endl;
 return 0;
}```
递归算法在写代码的过程中是比较常用的,故一定要掌握好!!!!!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值