您的位置:首页 > 编程语言

实用算法的分析与程序设计——递推法(顺推法)包含实例,代码

2015-05-07 19:19 471 查看

顺推法即由边界条件出发,通过递推关系式推出后项值,再由后项值按递推关系式推出再后项值。。。依次递推,直至从问题初始陈述向前推进到这个问题的解为止。

实例











代码

#include<iostream>
#include<stdlib.h>
using namespace std;

const int maxN = 60 ;
int N = 4 ,d = 2 , m = 3;
float a1 = 2 ,an = 5;

void input()
{
cout<<"input data N,d,a1,an,m"<<endl;
cin>>N>>d>>a1>>an>>m;
if( N > maxN )
{
cout<<"input error"<<endl;
return ;
}

if( N > m )
{
cout<<" m is too large "<<endl;
return ;
}

if( m < 0 )
{
cout<<"m must be a positive data."<<endl;
return;
}

}

//计算am与a1之间的关系s
//a[i] = s[m][0]*a[2] + s[i][1]*d + s[i][2]*a1
//a2 = ( an - s[N-1][1] * d - s[N-1][2] * a1 ) / s[N-1][0]
void calculate_s(float  **s ,float *list)
{

s[0][0] = 0;
s[0][1] = 0;
s[0][2] = 1;

s[1][0] = 1;
s[1][1] = 0;
s[1][2] = 0;
for(int i = 2 ; i < N ; i++ )
{
s[i][0] = s[i-2][0] - 2 * s[i-1][0];
s[i][1] = s[i-2][1] - 2 * s[i-1][1] + 2;
s[i][2] = s[i-2][2] - 2 * s[i-1][2];
}
list[0] = a1;
list[1] = ( an - s[N-1][1] * d - s[N-1][2] * a1 ) / s[N-1][0] ;
for(int j = 2 ; j < N ; j++ )
{
list[j] = list[j-2] - 2*list[j-1] +2 * d;
}

}

//输出最后的结果
void out(float  **s ,float *list)
{
int i;

for(i = 0 ;i < N ; i++ )
{
cout<<s[i][0]<<" "<<s[i][1]<<" "<<s[i][2]<<" "<<endl;
}

cout<<"data........"<<endl;
for(i = 0 ;i < N ; i++ )
{
cout<<list[i]<<" ";
}

cout<<endl;
}

int main()
{
//input();

//s[i][0]表示p s[i][1]表示q s[i][2]表示r
float **s = (float **)malloc(sizeof(float*) * N);
for(int ii = 0 ; ii < N ; ii++ )
s[ii] = (float *)malloc(sizeof(float) * 3);
float *list = (float *)malloc( sizeof(float) * N );

calculate_s(s , list );

out( s , list );

cout<<"\nthe result of "<<m<<"  data is:";
cout<<list[m-1]<<endl;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: