《递归函数》 题解

目录

题目描述

输入描述

输出描述

解析

完整代码


描述

考虑如下的3参数递归函数w(a,b,c);
如果a≤0或b≤0或c≤0,则w(a,b,c)=1;
如果a>20或b>20或c>20,则w(a,b,c)=w(20,20,20);
如果a其他情况下:w(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)。

输入描述

1行整数,包含3个数值,分别对应a、b和c的值。

输出描述

一个数,即w(a,b,c)的结果。

用例输入 1 

1 1 1

用例输出 1 

2

这题是最基础的递归,一定要会;把题目上说的每一种情况一一列举出来,返回相应的值(三维数组)就行了;

下面出示代码:

#include<bits/stdc++.h>
using namespace std;
long long a,b,c,p[65][65][65];
long long w(long long x,long long y,long long z){
    if(x<=0 || y<=0 || z<=0){
		return 1;
	}
	else if(x>20 || y>20 || z>20){
		return w(20,20,20);
	}
	else if(p[x][y][z]!=0){
		return p[x][y][z];
	}
	else if(x<y && y<z){
		p[x][y][z]=w(x,y,z-1)+w(x,y-1,z-1)-w(x,y-1,z);
		return p[x][y][z];
	}
	else{
		p[x][y][z]=w(x-1,y,z)+w(x-1,y-1,z)+w(x-1,y,z-1)-w(x-1,y-1,z-1);
		return p[x][y][z];
	}
}
int main(){
	while(cin>>a>>b>>c){
		if(a==-1&&b==-1&&c==-1)return 0;
		long long n=w(a,b,c);
		printf("%lld\n",n);
	}
	return 0; 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值