请用递归实现这个问题,谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/02 23:46:44
一个人去打靶,靶最多十环,打了10 次靶,总分90环,列出每次可能的环数
用java写

打10次靶,分别记录这10次打靶过程,用循环来完成
for(int i1=0;i1<=10;i++)
{
for(int i2=0;i2<=10;i2++)
{
for(int i3=0;i3<=10;i3++)
{
---
for(int i10=0;i10<=10;i10++)
{
if(i1+i2+i3+.+i10=90)
{
//一种可能
}
}
---
}
}
}
但是这样做有两点不足:
1)如果题目改为连打1000枪,得分为900的可能性,估计这种写法的要哭了
2)考虑不周全,如果第一次打靶得分为0,还有9次机会,这9次机会,就要求枪枪都是满分,如果第二枪,得分不是10,那第三枪不用打就知道可能没有可能性了。就比如乒乓球比赛一样,5局3胜制,如果进行了3局都是一个人胜利的话,比赛这时候就可以宣告结束。而继续下去就是浪费时间和精力
2。采用第归的方法来解决上述问题
第归就是自己调自己,如果没有结束限制的话,第归的效果和dead loop是一样的,但是第归正常情况下都会有结束标志,而且第归的意义就在于完成循环层数不明确或者层数明确但是数值非常大的情形。使用它的注意点就是第归函数肯定要具有一个或者一个以上的形参,没有参数的第归就形成了死循环。而且第归中函数每次调用自己的时候,需要小心谨慎的控制参数。尽量防止死循环的产生,第归和栈关系密切。
要实现上述功能,第归函数要完成的功能