我正在尝试编写一个树木生长算法,其中树木每年经历两个生长周期。第一个生长周期发生在春季,那时它的高度翻了一番。第二个生长周期发生在夏季,此时它的高度增加了1米。
我现在的问题是,春天开始时种了一棵新树。它的高度是1米。我想在n个生长周期后找到树的高度?
我在做一些递归函数的研究,其中函数调用它自己。在这里,它使您编写的代码比while循环更加优雅和简单。但是我在执行这个函数时遇到了问题

n = input('How long would you like the tree to for?: ')


def cycle(n):
 if n == 0:
    n = + 1
    return n
    print '/n' # The reason for all the '/n' is just for neatness.
    print('The tree will be ' + n + 'Ft tall')

 elif n % 2 == 0:
    n = 1 + cycle(n - 1)
    return n
    print '/n'
    print('The tree will be ' + n + 'Ft tall')

 elif n % 2 != 0:
    n = 2 * cycle(n - 1)
    return n
    print '/n'
    print('The tree will be ' + n + ' Ft tall')

 cycle(n)

最佳答案

你的变量n也把树的高度和生长周期结合起来。您应该为不同的度量实例化不同的变量!而且,n在堆栈的所有级别都被修改,可能导致错误的输出。
递归调用可以使算法更优雅,但它们也几乎总是不如非递归解决方案直观。我给初学者的建议是迭代求解问题,然后将迭代算法转换为递归形式。

07-24 15:58