第14课 递归

1。递归的本质i就是自己调用自己,这个过程说来简单,但是实际操作起来很是困难

2.递归应该注意的问题。

 (1)什么时候开始?

 (2)什么时候结束?

(3)递归的过程。

只要明了这三点,递归就很简单了。

另一个说法是:有去有回。

例子:

//求1-100的和
int add(int i)
{
    if(i==1)
    return i;//结束
    else
    return fun(100-i)+i;//过程
}

int main()
{
    printf("%d\n",fun(100));//开始
    return 0;
}

这个递归计很简单。

当fun函数开始被调用的时候,i=100;

当i!=1的时候,调用过程是父fun(100-i)+i,这也是“去”的过程

当i=1时,fun(1)=1

解析如下:

i=100,fun(100)=fun(99)+100

i=99,fun(99)=fun(98)+99

...........................

i=2,fun(2)=fun(1)+2

i=1,fun(1)=1

这是整个“递”的过程,

回的过程是将值一层一层往回带入,这是“归”的过程。

例题1:

求10!

10!=10*9*8*7*6*5*4*3*2*1;

#include<stdio.h>

int fun(int i)
{
    if(i==1)
    return i;
    else
    fun(10-i)*i
}

int main()
{
    printf("%d\n",fun(10));
}

例题2

求阶乘之和

fun(5)=5!+4!+3!+2!+1!

#include<stdio.h>


int fun(int i)
{
    if(i==5)
    return i;
    else
    return fun(i+1)*i+i;    
}
int main()
{
    printf("%d\n",fun(1));
    return 0;
}

求斐波拉契数列

1,1,2,3,5,8,13,21,33,54

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

#include<stdio.h>

int fun(int i)
{
    if(i==1||i==2)
    return i;
    else
    return fun(n-1)+fun(n-2)
    
}

int main()
{
    printf("%d\n",fun(10));
}

猜你喜欢

转载自blog.csdn.net/weixin_42581560/article/details/81121746
今日推荐