本文主要是介绍递归函数(c++题解),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
对于一个递归函数w(a, b, c)。
如果a <= 0 or b <= 0 or c <= 0就返回值1。
如果a > 20 or b > 20 or c > 20就返回W(20,20,20)。
如果a < b并且b < c 就返回w(a, b, c − 1) + w(a, b − 1, c − 1) − w(a, b − 1, 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)
这是个简单的递归函数,但实现起来可能会有些问题。
输入格式
会有若干行.每行三个数,表示a, b, c。并以−1, −1, −1结束
输出格式
输出若干行,
样例
样例输入
复制1 1 1
2 2 2
-1 -1 -1
样例输出
复制w(1,1,1)=2
w(2,2,2)=4
数据范围与提示
|a|, |b|, |c| < 30
_____________________________________________________________________________
写作不易,点个赞呗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
_____________________________________________________________________________
#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("w(%lld,%lld,%lld)=%lld\n",a,b,c,n);}return 0;
}
这篇关于递归函数(c++题解)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!