递推算法C++

03-19 1842阅读

所谓递推,是指从已知的初始条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果。其中初始条件或是问题本身已经给定,或是通过对问题的分析与化简后确定。
从已知条件出发逐步推到问题结果,此种方法叫顺推。
从问题出发逐步推到已知条件,此种方法叫逆推。
无论顺推还是逆推,其关键是要找到递推式。这种处理问题的方法能使复杂运算化为若干步重复的简单运算,充分发挥出计算机擅长于重复处理的特点。

递推算法C++

算法特点:

  • 1.问题可以划分成多个状态;
    2.除初始状态外,其它各个状态都可以用固定的递推关系式来表示。
    在我们实际解题中,题目不会直接给出递推关系式,而是需要通过分析各种状态,找出递推关系式。

    例题1:树塔问题

    描述:

    树塔问题,编写程序计算从顶到底的某处的一条路径,使该路径所途径的数字最大

    #include
    using namespace std;
    int main() {
    	int n, a[101][101];
    	cin >> n;
    	int sum =0;
    	for (int i = 1; i  a[i][j];
    		}
    }
    		for (int i = n; i >= 1; i--) {
    			int max = a[i][1];
    			for (int j = 1; j  max) {
    					max = a[i][j];
    				}
    			}
    			sum += max;
    		}
    	
    		cout  n;
    	for (int i = 3; i > z;
           fun(x,y,z);
    }

    例题4:位数问题

    描述

    在所有的 N 位数中,有多少个数中有偶数个数字 3?由于结果可能很大,你只需要输出这个答案对 12345 取余的值。

    #include
    using namespace std;
    bool is_even(int a) {
    	int count = 0;
    	while (a != 0) {
    		int ge = a % 10;
    		if (ge == 3) { count++; }
    		a /= 10;
    	}
    	if (count % 2 == 0) {
    		return true;
    	}
    	else {
    		return false;
    	}
    }
    int main() {
    	int n;
    	cin >> n;
    	int count = 0;
    	for (int i = pow(10,n-1); i  n;
    	for (int i = 1; i  a[i][j];
    		}
    	}
    	cin >> day;
    	for (int i = 2; i 

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]