函数二——递归

函数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 ", a, c);
}
else
{
hnt(n - 1, a, c, b);//a位置借助c位置移动到b位置
printf("%c
=>>%c ",a, c);
hnt(n - 1, b, a, c);//b位置借助a位置移动到c位置
}
}
int main()
{
hnt(5, 'a', 'b','c');
while (1);
return 0;
}

原文地址:https://www.cnblogs.com/Kissfly123/p/13944031.html