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]);

  }

  }

  }

  }