C语言函数,递归(习题)

         递归:直接或者间接调用自身函数

         1. 返回值 函数名(形参)
         {
            ...
         函数名(实参);
            ...
         }
     注:  1,when从什么时候     2,when到什么时候结束     3,what 每次递归时你需要干嘛

习题:

        斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。求斐波那契数列:

        以兔子繁衍来说 , 首先有一对成熟的兔子生下一只兔子, 过两个月才会生下一只幼兔 , 一只幼兔需要过一个月长大 , 两个月成熟 , 成熟后生下一只兔子 , 幼兔也是如此 .

        成熟 : 1   1   1   2   3   5   8   13

        幼子 : 0   0   1   1   2   3   5    8

        兔总 : 1   1   2   3   5   8  13  21 

        月份 : 1   2   3   4   5   6   7    8

                f(1) = 1;

                f(2) = 1;

                f(3) = 2;  ==> f(1) + f(2)

                f(4) = 3;  ==> f(2) + f(3)

                f(5) = 5;  ==> f(3) + f(4)

                f(6) = 8;  ==> f(4) + f(5)

                f(7) = 13; ==> f(5) + f(6)

                f(8) = 21; ==> f(6) + f(7)

          公式 : f( i ) = f( i-1 ) + f( i-2 );

          使用递归所得 :

#include<stdio.h>
int fun(int n)
{
    if(n==1||n==2)   
        return 1;
    else   
    return   fun(n-1)+fun(n-2);
}

int main ()
{
    //1、递归方法实现(不打印每一项)
    int n;
    scanf("%d",&n);
    printf("the result is %d\n",fun(n));
}

习题:

       猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第10天在想吃的时候就剩一个桃子了,问第一天共摘下来多少个桃子?

       day = 10;  f(1桃子)  =  1 ;

       day =  9;   f(2桃子)  =  (1 + 1) * 2 ;

       day =  8;   f(3桃子)  =  { [(1 + 1) * 2] + 1 } * 2   ==>   [ f(2桃子) + 1 ] * 2 ;

       公式 : f ( i ) = ( f ( i桃子 ) + 1 ) * 2 ;

#include<stdio.h>

int fun(int i)
{
    if(i == 10)
    return 1;
    else
    return (fun(i+1)+1)*2 ;
}
void main()
{
    printf("第一天的桃子:%d\n",fun(1));
}

习题 :

        为用户提供功能模块: 对整型数组排序(冒泡)

        bubble.c:

        void bubble(int buf[100],int ilen);

        //static void swap( int *, int * );

        提供声明头文件:bubble.h

首先在Linux的vi编辑器下,创建一个main.c 的文件.

//来自系统文件
#include<stdio.h>
//包含头文件:就是引入头文件 ”“本地址或系统
#include "select.h"

extern int num;

//包含头文件:就是引入头文件

void main()
{
//字符串:
	char buf[100]="zawsgtbrvedcummnhyolp";
//调用函数:selectSort
	select(buf);
	printf("%s\n",buf);
//引用外部变量:(变量:定义,作用域:)
	printf("%d\n",num);
}

当前目录下创建一个bubble.c的文件.

void bubble(char buf[100],int ilen)
{
	int i=0,j=0;
	char temp;
	for(i=0;i<ilen;i++)
	{
		for(j=0;j<ilen-i-1;j++)
		{
			if(buf[j]<buf[j+1])
			{
				temp = buf[j+1];
				buf[j+1] = buf[j];
				buf[j] = temp;
			}
		}
	}
}

创建一个bubble.h的文件.

extern void bubble(char buf[100],int ilen);

猜你喜欢

转载自blog.csdn.net/superman___007/article/details/81124211