/// <summary> /// 递归调用 /// </summary> /// <param name="currentHeight">当前高度</param> /// <param name="num">反弹总次数</param> /// <param name="currentNum">当前反弹的次数</param> /// <param name="totalLength">运行的总距离</param> /// <returns>反弹达到目标次数时球的高度</returns> protected double Cale(double currentHeight,int num,int currentNum,ref double totalLength) { //总运行距离=总运行距离+当前的高度(反弹前的总运行距离); totalLength = totalLength + currentHeight; //当前高度 = 当前高度 除以 2;(即反弹多高) currentHeight = currentHeight / 2; //总运行距离 = 总运行距离+反弹后的当前高度 totalLength = totalLength + currentHeight; //当前反弹次数自增1 currentNum++; //判断当前反弹次数和目标反弹次数是否一致,一致则返回当前高度 if (num <= currentNum) { return currentHeight; } //递归调用本身 return Cale(currentHeight, num, currentNum,ref totalLength); } 利用返回值输出当前球的高度,利用ref参数输出总运行距离