树生长算法

6
我正在尝试编写一种树木生长算法,其中树木每年经历2个生长周期。第一个生长周期发生在春季,当时树木的高度翻倍。第二个生长周期发生在夏季,此时树木的高度增加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是什么?循环次数还是高度?另外,由于在打印之前已经进行了返回操作,因此print语句不起作用。 - Lafexlos
计划是让“n”成为您希望树在几年内生长的长度。但是1年= 2个周期。夏季树木生长+1m,春季树木* 2其高度。 - ab intra
你正在从用户那里获取最终高度,所以你想要返回什么?树需要多少个周期才能达到/接近那个高度(n)?在原帖中,你说“我想找到N个生长周期后树的高度”,但是在代码中,你正在获取高度本身,这会导致一些困惑-至少对我来说是这样的。 - Lafexlos
2个回答

1
你的变量n将树的高度与生长周期混淆了。你应该为不同的测量实例化不同的变量!此外,n在堆栈的所有级别上都被修改,很可能导致错误的输出。
递归调用可以使算法更加优雅,但它们几乎总是比非递归解决方案更加不直观。我建议初学者先迭代地解决问题,然后再将迭代算法转换为递归形式。

0

我不认为递归函数是这个程序的最佳选择。此外,对于您的第一行,您应该使用int(input())而不仅仅是input()。虽然,如果您确实希望使用递归函数,这是我的程序代码:

n = int(input("How many years does the tree grow? "))
def cycle(s, height):
    height *= 2
    height += 1
    s -= 1
    if s != 0:
        cycle(s, height)
    else:
        print("Your tree was", height, "meters.")
cycle(n, 1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接