函数二——递归
函数2
1.将函数作为表达式使用
int func(int x,int y )
{
return x+y;
}
int main()
{
printf("%d",func(100,200));
}
2.将函数作为语句
void func()
{
printf("hello world");
}
int main()
{
func();
}
3.将函数作为实参使用
#include<stdlib.h>
#include<time.h>
int myrand()
{
srand((unsigned int)time(NULL));
return rand()%5;
}
int main()
{
int arr[5]={10,20,30,40,50};
printf("%d",arr[myrand()]);
//myrand()就是作为实参使用的函数
return 0;
}
调用函数也是分先后顺序的
void func1(int data)
{
printf("%d",data);
}
void func2(int data)
{
fun1(data-1);
printf("%d",data);
}
int main()
{
func2(10);
return 0;
}
//输出的结果是
9 10
重点:函数的递归
指的是——函数可以调用自己,这就叫函数的递归
一定有一个终止条件
1+2+3...+100用递归来算
int func(int data)
{
if(data==1)
{
return 1;
}
else
{
return data+func(data-1);
}
}
int main()
{
printf("%d",func(100));
return 0;
}
计算n的阶乘
int func2(int n)
{
if(n==0)
{
return 1;
}
else
{
return n*func1(n-1);
}
}
递归算法
1.递归的终止条件
2.N 前面:n-1和终止条件的关联
斐波拉契数列
1,1,2,3,5,8,13,21,34,55....
int f(int n)
{
if(n==1||n==2)
{
return 1;
}
else
{
return f(n-1)+f(n-2);
}
}
int main()
{
printf("%d",f(56));
}
//输出第6项为8
//汉诺塔游戏的外挂
void hnt(int n, char a, char b, char c)
{
if (n == 1)
{
printf("%c==>>%c\n", a, c);
}
else
{
hnt(n - 1, a, c, b);//a位置借助c位置移动到b位置
printf("%c=>>%c\n",a, c);
hnt(n - 1, b, a, c);//b位置借助a位置移动到c位置
}
}
int main()
{
hnt(5, 'a', 'b','c');
while (1);
return 0;
}