递推算法的首要问题是得到相邻的数据项间的关系(即递推关系)。递推算法避开了求通项公式的麻烦,把一个复杂的问题的求解,分解成了连续的若干步简单运算。一般说来,可以将递推算法看成是一种特殊的迭代算法。
分析:从递推的思想出发,a[i][j]=max{a[i][j]+a[i+1][j],a[i][j]+a[i+1][j+1]},a[1][1] 即为所求的数字总和的最大值。
#include<bits/stdc++.h>
using namespace std;
int Max(int a,int b,int sum)
{
if(a>b)
sum=sum+a;
else
sum=sum+b;
return sum;
}
int main()
{
int x,y;
int a[100][100];
int n;
cin>>n;
for(x=1;x<=n;x++)
for(y=1;y<=x;y++)
cin>>a[x][y];
for(x=n-1;x>0;x--)
for(y=1;y<=x;y++)
a[x][y]=Max(a[x+1][y],a[x+1][y+1],a[x][y]);
cout<<a[1][1];
楼梯有n个台阶,上楼可以一步上一阶,也可以一步上两阶。一共有多少种上楼的方法?
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
int sum=3;
cin>>n;
if(n<=2&&n>=1)
sum=n;
else
{
int a[100];
a[1]=1;a[2]=2;
for(int i=3;i<=n;i++)
{
a[i]=a[i-1]+a[i-2];
}
sum=a[n];
}
cout<<sum;