例题1:一个射击运动员打靶,靶一共有10环,连开10枪打中90环的可能性有多少种?请用递归算法编程实现。[中国某著名通信企业H面试题]
解析:靶上一共有10种可能——1环到10环,还有可能脱靶,那就是0环,加在一起共11种可能。这是一道考循环和递归的面试题。我们在这个程序中将利用递归的办法实现打靶所有可能的演示,并计算出结果。(可以连续用10个循环语句来表示程序)
for (i1=0;i1<=10;i1++)
{
for (i2=0;i2<=10;i2++)
for (i3=0;i3<=10;i3++)
......
for (i10=0;i10<=10;i10++)
if(i1+i2+i3+...+i10=90)
Print();
}
}}}
注意2个条件:
(1)如果出现这种情况,即便后面每枪都打10环也无法打够总环数90,在这种情况下就不用再打了,则退出递归。
(2)如果满足条件且打到最后一次(因为必须打10次)
代码: