小编Rob*_*ndi的帖子

更简单的递归代码比同一事物的迭代版本运行得慢

我编写了这个 python 代码,以递归和迭代的方式给出某个值 n 的谐波级数。下面是函数:

def H(n):
    if (n <= 0): raise ValueError("n must be bigger than 0.")
    if (n == 1): return 1
    else: return sum([1/x for x in range(1,n+1)])

def H_rec(n):
    if (n <= 0): raise ValueError("n must be bigger than 0.")
    if (n == 1): return 1
    else: return 1/n + H(n-1)
Run Code Online (Sandbox Code Playgroud)

然后,当我为每个代码运行 10 次时,我得到以下时间:

RECURSIVE TIMES [22.755768060684204, 17.231882095336914, 14.965636014938354, 14.277509927749634, 14.0553719997406, 13.788002014160156, 13.338942766189575, 13.72638201713562, 14.690818071365356, 14.236813068389893] 
RECURSIVE MEAN: 15.30671260356903
ITERATIVE TIMES [15.093524932861328, 12.801156759262085, 13.350629091262817, 13.806081056594849, 13.29387378692627, …
Run Code Online (Sandbox Code Playgroud)

python recursion time

5
推荐指数
1
解决办法
160
查看次数

处理嵌套的React组件的状态更改

所以,我有多个ReactComponent.最初,我认为有一个父组件(让我们称之为GrandPa)有自己的状态,它会将有关其状态的一些信息传递给另一个组件(称之为Parent).同样,父母将他的一些孩子和孩子传给了GrandChild.所以我们有层次结构:

GrandPa - >父母 - >孩子 - > GrandChild

但是,我很快意识到,当我用方法this.setState(prevState => (<new state based on prevState>))更改GrandPa的状态时,更改不会使通道级联.我意识到的另一个问题是在频道上传递更改.我还没有找到一个很好的方法来做到这一点.(之前,我通过将一些事件绑定到DOM中的组件并具有可从所有ReactComponent访问的公共变量来做一些超级粗略的事情.然后当任何人触发特定事件时,我会尝试触发将更新事件的事件各个组成部分......长话短说,这造成了很多问题并且很难看.)

所以,我有下面的示例代码,我尝试只使用父和子这样做.这是一个虚拟的例子,但它只是学习如何做到这一点.调用的父级ReactRandom具有状态,{name: <name>}并具有将该名称更改为随机字符串的方法.当ReactRandom渲染,它使得从另一个组件,它的名字ReactRandomNested基本上打印出通过自己的道具通过了名.在这里,我创建了一个方法,ReactRandomNested其中明确地呈现了更改(我不想要这样做,我认为有一种方法可以将更新级联到通道而不必明确地执行此操作,因为它会变得非常讨厌我们有> 2个嵌套级别).但是,即使这样也行不通.它有一步延迟,并在当前时间步长呈现先前的更新.

无论如何,这是我目前的代码:

class RandomReactNested extends React.Component {
    constructor(props) {
        super(props);
        this.state = {name: props.name};
    }

    handleChange() {
        let self = this;
        self.setState({name: self.props.name});
    }

    render() {
        let self = this;
        return React.createElement("span", {
            onClick: () => self.handleChange.call(this)
        }, self.state.name);
    }
}

class RandomReact extends React.Component {
    constructor (props){
        super(props);
        this.state …
Run Code Online (Sandbox Code Playgroud)

javascript inheritance multiple-inheritance reactjs

3
推荐指数
1
解决办法
3530
查看次数