【问题标题】:get Fibonacci number index, recursively递归获取斐波那契数索引
【发布时间】:2018-05-07 14:31:32
【问题描述】:

我需要一个递归函数,它可以让我得到传递给它的斐波那契数的索引。

例如,当我们传递 8 时,提到的函数应该返回 6;或者当我们通过 21 时它应该返回 8。

任何帮助将不胜感激。 谢谢!

【问题讨论】:

  • 是的,你试过什么?
  • 虽然确实如此,但这是一个非常有趣的问题
  • 感谢您的指导!我会尽快更新问题。
  • 很好,我会留意的。祝你好运,我期待看到改进!另外,如果您自己找到答案,可以发布您自己的答案。

标签: recursion fibonacci


【解决方案1】:

这是我的解决方案!
它工作正常并返回我所期望的。
确保 ab 在函数声明中具有自己的默认值。

int getTermIndex(int, int&, int=1, int=1);

功能实现:

int getTermIndex(int number, int& i, int a, int b) {

    if(number==0) return i;
    else if(number==1){
        i++;
        return i;
    }

    int nextFib = a+b;

    if(nextFib==number || nextFib>number) {
        i += 3;
        return i;
    }
    else {
        i++;
        getTermIndex(number, i, b, nextFib);
    }

}

功能用法:

int number;
cin >> number;

int nth=0;
getTermIndex(number, nth);

【讨论】:

  • 干得好!我撤回了我的投票结束。如果您有兴趣进一步阅读,有一个(非递归)版本here on SO
  • 虽然在语法上是递归的,但在语义上这是一个迭代过程。实际上,在具有尾调用优化的语言中,is 只是一个循环。您的代码甚至依赖于此,因为在最后的 else 子句中没有 return 语句。
猜你喜欢
  • 2010-12-03
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-02
  • 2021-12-01
  • 2012-11-19
相关资源
最近更新 更多