初识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;

}

相关推荐
yutian0606几秒前
C# 去除字符串中首尾、首、尾、的空格
开发语言·c#
LoserChaser5 分钟前
windeployqt.exe打包qt程序总结(MSVC)
开发语言·qt
fadtes6 分钟前
C++ this指针(八股总结)
开发语言·c++
Trouvaille ~10 分钟前
CSDN 博客:CC++ 内存管理详解
java·c语言·c++
xweiran10 分钟前
Spring源码分析之事件机制——观察者模式(一)
java·开发语言·spring·观察者模式·事件机制
WeeJot嵌入式20 分钟前
C语言----指针
c语言·指针
田姐姐tmner28 分钟前
互联网行业分析
开发语言·网络·功能测试·测试工具·测试覆盖率
drebander32 分钟前
Kotlin 面向对象与函数式编程
android·开发语言·kotlin
yutian060633 分钟前
C#: button 防止按钮在短时间内被连续点击的方法
开发语言·c#
天下皆白_唯我独黑36 分钟前
php Yii2 Excel导出图片资源到表格
开发语言·php·excel