python - 高尔顿代码 - 从递归到迭代
问题描述
def galton(m, n):
if m == 0:
if n == 0:
return 1
else:
return 0
else:
if n == 0:
return 1
else:
return (galton(m-1, n-1) + galton(m-1, n))
您好,有人知道我如何将这段代码从递归更改为迭代吗?我用高尔顿公式试过了,但我只得到了概率。
代码:
import operator as op
from functools import reduce
def ncr(n, r):
r = min(r, n-r)
numer = reduce(op.mul, range(n, n-r, -1), 1)
denom = reduce(op.mul, range(1, r+1), 1)
return numer / denom *(0.5**n)
解决方案
您的galton
函数似乎只是'nCr' 的递归实现,因此任何 nCr 函数只需稍作改动即可在以下情况下返回零r > n
:
def ncr(n, r):
if r > n:
return 0
r = min(r, n-r)
numer = reduce(op.mul, range(n, n-r, -1), 1)
denom = reduce(op.mul, range(1, r+1), 1)
return numer // denom
推荐阅读
- bottom-sheet - 防止底片覆盖底部应用栏
- mysql - 遇到错误 sql_mode=only_full_group_by 那么如何获得我需要的结果
- javascript - 如何将 fillStyle 添加到 Path2D?JS 画布
- python-2.7 - Squish 6.2 中未定义全局名称 waitForImage/findImage 错误
- bash - Bash 脚本无法写入日志文件
- java - openjdk-8-jre-headless:中断:ca-certificates-java (< 20160321~)
- angular - Angular FormArray 模板值未绑定到 Typescript
- rust - Rust 函数返回通用特征
- arrays - 从嵌套数组中检索数据
- javascript - 有没有办法使用 Javascript 代码自动切换浏览器字体设置?