以下是获取nth
Fibonacci数的递归方法。
static int getNthFib(int n) {
if (n < 2) return 1;
return getNthFib(n - 2) + getNthFib(n - 1);
}
如果我传过5,它将返回5,即Fibonacci序列中的第五个元素。
0 1 1 2 3 5
但是当我试图理解这个递归调用中实际发生了什么并抽出每个方法调用时,我希望它返回8.下面的图表是不是方法调用堆栈,如果是为什么不是回答13?
注意
我编辑了图像,原来是错的。但是,如果我将这个数字的所有数字加起来,答案就会出现8.尽管实现不正确,为什么它会返回5而不是8?
答案 0 :(得分:5)
Morever F(0)应该为零而不是1,因为如果没有元素,sum应该返回为零。(修改基本情况)
正如评论中所建议的,并根据您的新问题如果您需要找到斐波纳契系列。尝试使用以下代码绘制树,它应该给你正确的结果。
static int getNthFib(int n) {
//change the return statement to return n, rather than return 0.
if (n < 2) **return n**;
return getNthFib(n - 2) + getNthFib(n - 1);
}
答案 1 :(得分:0)
如果我们查看Fibonacci numbers的定义,我们有:
F(0)= 0
F(1)= 1
F(n)= F(n-1)+ F(n-2),每n> = 2
因此,对于基本情况,我们应该写这样的东西:
import atexit
import datetime
def hello():
print "hello, world"
def saveDateTime():
now = datetime.datetime.now()
## create log
with open("logs.txt", "a") as log:
log.write(str(now) + "\n")
def goodbye():
try:
_dates = open("logs.txt").read()
_count = len(_dates)
except IOError:
_count = 0
print 'Goodbye, this script has been run %d times.' % (_count)
if __name__ == "__main__":
hello() ## run hello
atexit.register(saveDateTime) ## then log when you used this
atexit.register(goodbye) ## then log when you used this
至于图表,我看到两个问题:
根据我刚才写的代码。
if (n = 0) return 0;
if (n = 1) return 1;