• 【题解】桐桐的递归函数


    题目描述

    桐桐经常找一些很有趣的数学书来阅读以增长自己的数学知识。

    一天,他偶然发现一个递归函数w(a,b,c)有以下性质:

    如果a≤0或b≤0或c≤0,就返回值1;

    如果a>20或b>20或c>20,就返回w(20,20,20);

    其它别的情况就返回w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1)。

    桐桐想通过编程求出这个简单的递归函数的值,可是他在编程的时候遇到了一些困难。你能帮助他吗?

    输入输出格式

    输入格式:

    一行,a,b,c三个整数,-50≤a,b,c≤50。

    输出格式:

    a,b,c三个整数所对应的w(a,b,c)函数的值。要求以w(a, b, c)=函数的值来输出。

    输入输出样例

    输入样例一:
    1 1 1
    输出样例一:
    2
    输入样例二:
    50 50 50
    输出样例二:
    1048576
    做法:递归、记忆化递归
    用一个三维数组储存函数w(a,b,c)的值,把它分解为若个子问题,遇到特别大的值时就把它分解为若干子问题的值,就可以很快求出答案
    具体程序如下:
    #include<iostream>
    using namespace std;
    int num[55][55][55];
    int w(int a,int b,int c)
    {
        if(a<=0||b<=0||c<=0) return 1;
        if(a>=20||b>=20||c>=20) return 1048576;
        else
        {
            if(num[a][b][c]!=0) return num[a][b][c];
            else return num[a][b][c]=w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1);
        }
    } 
    int main()
    {
        int x,y,z;
        cin>>x>>y>>z;
        cout<<w(x,y,z);
    }
    
    
  • 相关阅读:
    kvm
    docker及lvs负载
    zookeeper,及k8s基础概念
    zabbix-proxy及ELK
    gitlab及jenkins
    绘图 Matplotlib Numpy Pandas
    Elasticsearch
    Git命令小结
    win黑窗口命令
    Linux基础命令
  • 原文地址:https://www.cnblogs.com/2021-yanghaoran/p/10716695.html
Copyright © 2020-2023  润新知