是否有任何技巧或方法来计算纸上的递归调用(数字较大)?

时间:2016-05-10 19:27:32

标签: python-3.x recursion

大家好,这是我的第一个问题!我想问一些技巧如何在不使用计算机的情况下计算纸张中的递归调用?示例中的语言是Python 3.xx.在这个例子中,如果我得到更大的数字,如11,我如何“轻松”计算这个例子中的星数?

def func(numb):
    print('*', end='')
    if numb <= 1:
        return False
    for i in range(numb):
        if func(i) and numb%i == 0:
            return False
    return True

func(11)

我发现太无效了,在程序运行时编写所有内容,特别是如果它正在测试中,太耗费时间。 谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

有几种计算递归调用的方法;这个基本上是迭代,我猜你做了

T(n) + T(n - 1) + T(n - 2) ... // in which T(n) is the complexity of the recursive call

替换将导致相同的结果,并且主定理在这里是无用的,因此这是你能做的最好的,并且因为你的每一个调用都是线性的,这最终会成为(最坏的情况,当然) :

n + (n - 1) + (n - 2) ... + 2 // since you end at 1

但如果你这样做,你实际上可以减少你的递归调用:

if numb%i == 0 and func(i): // you won't reach func(i) if num % i != 0

答案 1 :(得分:0)

请检查这些功能。

def recursion(numb):
    if(numb<1):
        return False
    print('*'),
    numb-=1
    recursion(numb)

recursion(11)

print('')

def recursion1(numb):
    if(numb<1):
        return False
    for i in range(numb):
        print('*'),
    print('')
    numb-=1
    recursion1(numb)

recursion1(11)