C#递归算法之打靶算法分析
using System;
namespace Test
{
///
/// ShotScore 的摘要说明。
///
public class ShotScore
{
//总共有多少种可能性
int SumRate = 0;
//每次可能命中的几率范围
int[] ScoreArray;
//总共需要多少分
int totalScore=0;
//一共能打多少次
int totalShot=0;
//当前共打中环数
public ShotScore(int[] sa,int ts,int t)
{
this.ScoreArray = sa;
this.totalShot = ts;
this.totalScore = t;
}
public int GetSum()
{
return SumRate;
}
public void Compute(int currentShot,int cNum)
{
//打多打少都不行
if(currentShot<0||currentShot>totalShot)
{
return;
}
//以后枪枪都中10都不能满足条件,game over
if(((totalShot-currentShot+1)*10)<(totalScore-cNum))
{
return;
}
//打够次数了并且总共达到了预期环数
if(currentShot==totalShot)
{
//这种可能性成立
SumRate++;
return;
}
for(int i=0;i { Compute(currentShot+1,cNum+ScoreArray[i]); } } } }