【函数篇】递归求斐波那契

【问题描述】

编写程序,利用 fun 函数递归求斐波那契数列。

输入:

6

输出:

8

【知识剖析】

递归是指:在某个函数的内部调用该函数本身,例如:

int fun(int n){
    fun(n-1);//在fun函数内部调用fun这个函数
    //类似套娃
}

斐波那契数列是指:数列第一项和第二项值为1,从第三项起,其值为前两项之和。例如:

1,1,2,3,5,8,13,21,34...

本题中输入的6代表的是数列中的第6项,对应的值为8,所以输出8。

【思路分析】

主函数:

(1)输入一个整数n

(2)将n传递给fun函数,用m接收fun的返回值

(3)将返回值m输出

#include<stdio.h>
int main(){
    int n, m;//m表示n的
    scanf("%d", &n);//输入n
    m = fun(n);//调用fun函数,值传递n,m接收fun函数返回值
    printf("%d", m);//输出m
}

递归思路

1.我们需要将第n项值的计算过程抽象出来:第n项的值 = 第n-1项的值 + 第n-2项的值

2.而第n-1项的值又可以抽象为:第n-1项的值 = 第n-2项的值 + 第n-3项的值

3.同理,第n-2项的值可以抽象为:第n-2项的值 = 第n-3项的值 + 第n-4项的值

套娃形式存在

如何变为递归解决呢?

我们将第n项的值fun(n)表示,可以得到:第n-1项的值fun(n-1)表示;第n-2项的值fun(n-2)表示。

fun(n) = fun(n-1) + fun(n-2)

而当n=1或者n=2时,f(n)的值为1,这里用if判断即可。

fun函数:

(1)形参接收值传递的n

(2)利用递归求n对应的斐波那契数列

(3)将数列中第n项的值返回

//n为int
//fun计算结果为int,所以函数类型为int
int fun(int n){
    if(n==1 || n==2){//如果n为第一项或者第二项
        return 1;//他俩的值为1,直接返回即可
    }
    //如果n>2,则需要利用递归计算
    //而函数那么第n项的值需要由第n-1项和第n-2项的值相加得到
    //fun(n-1)表示第n-1项的值,也就是n的前一项
    //fun(n-2)表示第n-2项的值,也就是n的再前一项
    return fun(n-1) + fun(n-2);//求出总和后返回即可
}

【代码注释】

#include<stdio.h>
//n为int
//fun计算结果为int,所以函数类型为int
int fun(int n){
    if(n==1 || n==2){//如果n为第一项或者第二项
        return 1;//他俩的值为1,直接返回即可
    }
    //如果n>2,则需要利用递归计算
    //而函数那么第n项的值需要由第n-1项和第n-2项的值相加得到
    //fun(n-1)表示第n-1项的值,也就是n的前一项
    //fun(n-2)表示第n-2项的值,也就是n的再前一项
    return fun(n-1) + fun(n-2);//求出总和后返回即可
}
int main(){
    int n, m;//m表示n的
    scanf("%d", &n);//输入n
    m = fun(n);//调用fun函数,值传递n,m接收fun函数返回值
    printf("%d", m);//输出m
}

【运行结果】

【总结】

通过分析fun函数需要计算的结果,来识别我们需要有哪些实参,哪些形参。

再分析计算结果是什么类型,以此来确定return语句和函数类型。

先把主函数中的逻辑理清楚,再分析题中的子函数的计算部分。

写完代码后,把自己的代码当做一道程序阅读题计算一遍。

【问题描述】 【问题描述】编写函数f,功能是用递归的方法斐波那契数列的第n项,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f斐波那契数列的第n项,并在主函数中输出。 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问题描述】编写函数f,功能是用递归的方法斐波那契数列的第n项,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f斐波那契数列的第n项,并在主函数中输出。 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问题描述】编写函数f,功能是用递归的方法斐波那契数列的第n项,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f斐波那契数列的第n项,并在主函数中输出。 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问题描述】编写函数f,功能是用递归的方法斐波那契数列的第n项,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f斐波那契数列的第n项,并在主函数中输出。 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值