递归:直接或者间接调用自身函数
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 );
使用递归所得 :
#includeint 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 ;
#includeint 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//包含头文件:就是引入头文件 ”“本地址或系统
#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
创建一个bubble.h的文件.
extern void bubble(char buf[100],int ilen);