斐波那契数列仅使用1个递归调用C

尝试使用递归函数计算斐波那契数,但我的代码使用了2个递归调用。是否可以只使用一个?将n-1的fib数保存到数组或类似物中,然后在函数末尾添加数字,这行得通吗?

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

int fib(int n) {
    assert(n >= 0);
    if (n > 1) 
        return fib(n - 1) + fib(n - 2);
    else if (n == 1)
        return 1;
    else 
        return 0;
}

int main(void) {
    int n,f;
    printf("the nth number: ");
    scanf("%d",&n);
    f = fib(n);
    printf("%d \n",f);
    return 0;
}

opencore 回答:斐波那契数列仅使用1个递归调用C

以下似乎有效:

int fib_in(int n,int cur,int prev) {
    if (n == 1 || n == 2) {
        return cur;
    }
    return fib_in(n - 1,cur + prev,cur);
}
int fib(int n) {
    fib_in(n,1,1);
}
,

函数“ fib”必须返回2个值。

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

void fib(int n,int * ra,int * rb) {
    assert(n>=0);
    if (n>1) {
        int ya,yb;
        fib (n-1,&ya,&yb);
        *rb = ya;
        *ra = ya + yb;
    } else if (n==1) {
        *ra = 1;
        *rb = 0;
    } else {
        *ra = 0;
        *rb = 0;
    }
}
int main(int argc,const char * argv[]) {
    int n;
    printf("the nth number: ");
    scanf("%d",&n);
    int ya,yb;
    fib(n,&yb);
    printf("%d \n",ya);
    return 0;
}
本文链接:https://www.f2er.com/3165326.html

大家都在问