zoukankan      html  css  js  c++  java
  • 【题解】桐桐的递归函数

    题目描述

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

    一天,他偶然发现一个递归函数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);
    }
    
    
  • 相关阅读:
    50个网页常用小代码
    web前端题目(持续更新)
    一步步构建大型网站架构(转)
    CentOS下配置node.js
    ajax文件上传
    test
    文件上传input简便美化方案
    String.match()与RegExp.exec()
    ie7下zindex问题
    javascript将数组插入到另一个数组中
  • 原文地址:https://www.cnblogs.com/2021-yanghaoran/p/10716695.html
Copyright © 2011-2022 走看看