编写一个函数,求从 n 个不同的数中取 r 个数的所有选择的个数。其个数值为: 其中: n! = n*(n-1)*(n-2)*...*1。要求:分别用递归和非递归两种方式完成程序设计;主 程序中设计一个循环,不断从输入接收 n 和 r 的值,计算结果并输出,当用户输入 0 0 时, 程序结束;能检查输入数据的合法性,要求 n>=1 并且 n>=r。
时间: 2024-04-14 07:26:52 浏览: 95
好的,我可以为您编写这个函数。首先,我们来看递归方式的实现:
```python
def combination_recursive(n, r):
if n == r or r == 0:
return 1
else:
return combination_recursive(n-1, r-1) + combination_recursive(n-1, r)
```
接下来,我们来看非递归方式的实现:
```python
def combination_iterative(n, r):
if n < r:
return 0
result = 1
for i in range(r):
result *= (n-i)
result //= (i+1)
return result
```
最后,我们可以编写一个主程序,循环接收输入并计算结果:
```python
while True:
n, r = map(int, input("请输入 n 和 r(空格分隔):").split())
if n == 0 and r == 0:
break
if n < 1 or r < 1 or n < r:
print("输入数据不合法,请重新输入")
continue
result_recursive = combination_recursive(n, r)
result_iterative = combination_iterative(n, r)
print("递归方式计算结果:", result_recursive)
print("非递归方式计算结果:", result_iterative)
```
请注意,以上代码需要在支持 Python 3.x 的环境中运行。
阅读全文