初识C语言之函数的递归

一初识递归

++1.递归的概念++:函数自己调用自己。

++2.递归的作用++:将一个复杂大型的问题层层转化为一个和原问题相似,但规模较小的子问题。来求解,直到子问题不可被拆分。

++3.限制条件++:每次递归调用之后,都会越来越接近该限制条件。

++4.举例:++

此次举一个错误的例子来方便理解:

int main ( )

{

printf("hehe");

main ( ); //再次调用main函数

return 0;

}

上述代码的效果为无限次的打印hehe。

上述代码错误的原因是:每次函数调用都会为此次函数调用分配内存空间,此空间是内存中的栈区。如果无限次的递归,便会将栈区的空间使用完,这时便会出现栈溢出(stack overflow)的问题。

二.函数递归实践的举例:

++1.举例一++:求n的阶乘。

分析: n !=n*(n-1) !

设计一个函数可以计算n的阶乘,第一次调用传n的参数,然后将n-1作为参数传给函数。让函数自己调用自己,达到递归的目的。

实践:

int Fact(int n)//定义一个函数,用来计算n的阶乘

{

if(n==1)//当n为1时

return 0;//返回值为0

if(n>0)//当n大于零时

return n*Fact (n-1);//用函数递归调用函数自己

}

int main()

{

int n=0;

scanf("%d",&n);

int r=Fact(n);//调用函数

printf("%d",r);

return 0;

}

2.举例二:顺序打印出整数的每一位

void print ( int n)//定义一个函数print参数为n

{

if(n>9)//如果n大于9时,调用print函数自己,传入的参数为n/10

{

print(n/10);

}

printf("%d",n%10);//打印n对10求余的结果

}

int main()

{

int n=0;

scanf("%d",&n);

int r=print(n);//调用print函数

return 0;

}

3.举例三:求出第n个斐波那契数

题目描述:斐波那契数列:1 1 2 3 5 8 13 21 34

题目分析:Fib(n)

当n≤2时,等于1。

当n>2时,等于Fib(n-1)+Fib(n-2)

代码实践:

int Fib (int n)

{

if(n<=2)//当n大于等于2结果返回值为1

return 1;

else

return Fib(n-1)+Fib(n-2);//其他情况调用Fib函数

}

int main ( )

{

int n =0;

scanf("%d",&n);

int r=Fib(n);//调用函数Fib

printf("%d",r);

return 0;

}

相关推荐
没有梦想的咸鱼185-1037-16632 分钟前
基于R语言机器学习方法在生态经济学领域中的实践技术应用
开发语言·机器学习·数据分析·r语言
.YM.Z7 分钟前
C语言——文件操作
c语言·文件操作
@小红花15 分钟前
从0到1学习Vue框架Day03
前端·javascript·vue.js·学习·ecmascript
向上的车轮26 分钟前
基于go语言的云原生TodoList Demo 项目,验证云原生核心特性
开发语言·云原生·golang
The Chosen One98527 分钟前
C++ : AVL树-详解
开发语言·c++
mysla32 分钟前
嵌入式学习day45-硬件—汇编
汇编·学习
PH_modest38 分钟前
【Qt跬步积累】—— 初识Qt
开发语言·qt
GanGuaGua1 小时前
Linux系统:线程的互斥和安全
linux·运维·服务器·c语言·c++·安全
永日456701 小时前
学习日记-HTML-day51-9.9
前端·学习·html
怀旧,1 小时前
【C++】18. 红⿊树实现
开发语言·c++