C34-递归函数编码实战
一 递归函数的基本信息
- 定义:函数内部直接调用自身的函数,需要终止条件避免无限递归.
- 终止条件:递归出口[如if(n==0) return 1;]
- 递推关系:将问题分解为规模更小的同类子问题[如:f(n)=n*f(n-1)]
- 优缺点:
- 优:代码简洁
- 缺:递归深度过大会导致栈溢出(如n过大时),效率可能低于迭代
- 使用建议:一般情况不建议使用递归,容易出问题;只在特定情况下使用
二 例题
我们以一个例题认识递归函数
- 题目
- 代码
#include <stdio.h>//==========
//封装递归函数
//==========
int GetAge(int CurrentPersonNum)
{int age;if(CurrentPersonNum==1){age=10;}else{age=GetAge(CurrentPersonNum-1)+2;}return age;
}//==========
//主函数
//==========
int main()
{//定义变量int age;int num;//询问用户的需求puts("你想知道第几位学生的年龄呀?");scanf("%d",&num);//调用已封装的递归函数进行计算age=GetAge(num);//返回用户的需求值printf("第%d位学生的年龄是:%d",num,age);return 0;
}
- 结果
三 用递归法求阶乘(在这里我们先不考虑越界问题)
- 问题:递归法求阶乘
- 代码
#include <stdio.h>//==========
//封装递归函数
//==========
int GetCalculateResult(int num)
{int CalculateResult;if(num==1) //这里用两个等号,表"判断"{CalculateResult=1; //这里用一个等号,表"赋值"}else{CalculateResult=num*GetCalculateResult(num-1);}return CalculateResult;
}//==========
//主函数
//==========
int main()
{//定义变量int num;int CalculateResult;//询问用户的需求&录入数据puts("请问你想求哪个整数的阶乘?请在这里输入:");scanf("%d",&num);//调用已封装的递归函数进行计算CalculateResult=GetCalculateResult(num);//返回用户的需求值printf("%d的阶乘是:%d",num,CalculateResult);return 0;
}
- 结果