C++递推想问问大家,提问

某汽车厂一月份生产汽车4辆,从2月份开始每个月生产的汽车是前一个月的产量减去1辆再翻一番,求每个月的产量和全年的总产量。
提示:定义一个一维数组a[N],则:
a[0]=4
a[1]=2(a[0]-1)
a[2]=2(a[1]-1)

img

a[n-1]=2(a[n-2]-1)

参考如下:

     
#include <stdio.h>

int main()
{
    int n = 12, sum = 0;
    int a[n];
    a[0] = 4;
    sum += a[0];
    printf("%d月产量=%d\n", 1, a[0]);
    for (int i = 1; i < n; i++) 
    {
        a[i] = 2 * (a[i - 1] - 1);
        printf("%d月产量=%d\n", i+1, a[i]);
        sum += a[i];
    }
    printf("全年总量=%d", sum);
    return 0;
}
#include <iostream>
using namespace std;

const int N = 12; 
int a[N];

int main() {
    a[0] = 4;
    for (int i = 1; i < N; i++) {
        a[i] = 2 * (a[i - 1] - 1);
    }
    int sum = 0;
    for (int i = 0; i < N; i++) {
        sum += a[i];
    }
    for (int i = 0; i < N; i++) {
        cout << "第" << i + 1 << "个月的产量:" << a[i] << endl;
    }
    cout << "总产量:" << sum << endl;
    return 0;
}

运行截图

img

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/264999
  • 除此之外, 这篇博客: C++面试经典100问中的 95.已知A[n]为整数数组,试写出实现下列运算的递归算法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • (1) 求数组A中的最大整数。
    (2) 求n个整数的和。
    (3) 求n个整数的平均值

    #include <iostream.h>   
    class RecurveArray   
    {                   //数组类声明   
    private:    int *Elements;      //数组指针    
            int ArraySize;      //数组尺寸  
            int CurrentSize;        //当前已有数组元素个数   
    public :  
            RecurveArray ( int MaxSize =10 ) :  
            ArraySize ( MaxSize ), Elements ( new int[MaxSize] ){ }   
            ~RecurveArray ( ) { delete [ ] Elements; }   
            void InputArray();      //输入数组的内容   
            int MaxKey ( int n );       //求最大值   
            int Sum ( int n );      //求数组元素之和  
            float Average ( int n );    //求数组元素的平均值  
    };  
      
      
    void RecurveArray :: InputArray ( )  
    {                   //输入数组的内容  
            cout << "Input the number of Array: \n";  
            for ( int i = 0; i < ArraySize; i++ ) cin >> Elements[i];  
    }  
      
    int RecurveArray :: MaxKey ( int n )   
    {           //递归求最大值  
            if ( n == 1 ) return Elements[0];  
            int temp = MaxKey ( n - 1 );  
            if ( Elements[n-1] > temp ) return Elements[n-1];  
            else return temp;  
    }  
    int RecurveArray :: Sum ( int n ) {         //递归求数组之和  
            if ( n == 1) return Elements[0];  
            else return Elements[n-1] + Sum (n-1);  
    }  
    float RecurveArray :: Average ( int n ) {           //递归求数组的平均值  
            if ( n == 1) return (float) Elements[0];  
            else return ( (float) Elements[n-1] + ( n - 1) * Average ( n - 1 ) ) / n;  
    }  
    int main ( int argc,  char* argv [ ] ) {      
                int size = -1;  
                cout << "No. of the Elements : ";  
                while ( size < 1 ) cin >> size;  
                RecurveArray ra ( size );  
                ra.InputArray();      
                cout<< "\nThe max is:  " << ra.MaxKey ( ra.MaxSize ) << endl;  
                cout<< "\nThe sum is:  " << ra.Sum ( ra.MaxSize ) << endl;  
                cout<< "\nthe avr is:  " << ra.Average ( ra.MaxSize ) << endl;  
                return 0;  
    }