一、
- 函数递归调用的定义:函数直接或间接的调用自身叫函数的递归调用。
二、
- 采用递归方法来解决问题时,必须符合以下两个条件:
(1)、可以把要解决的问题转化为一个规模较小的新问题,而这个新问题的解决方法仍与原来的解决方法相同。
- 即函数的自我调用
(2)、必定要有一个明确的结束递归的条件。
- 即递归出口
总而言之,可归纳为:
大事化小,小事化了
三、
递归调用过程(两个阶段):
-
递推阶段:将问题不断地分解为新的子问题,逐渐从未知的向已知的方向推测,最终达到已知的条件,即递归结束条件,这时递推阶段结束。
-
回归阶段:从已知条件出发,按照“递推”的逆过程,逐一求值回归,最终到达“递推”的开始处,结束回归阶段,完成递归调用。
四、
举一个经典的栗子 例子
题目:根据输入的整数n,计算并输出n的阶乘值。即为求n!=?
C语言:
#include<stdio.h>
int fact(int n)
{
if(n==1)
return 1;
else
return n*fact(n-1);
}
int main(void)
{
int m=0,n;
scanf("%d",&n);
m=fact(n);
printf("%d",m);
return 0;
}
再来个Python吧
def fact(n):
if n==1:
return 1
else:
return n*fact(n-1)
num = eval(input("请输入一个整数: "))
print(fact(abs(int(num))))
再举一个例子吧
题目:
反向输出一个整数
输入
1234
输出
4321
分析:
- 简化问题:设要输出的正整数只有一位,则”反向输出“问题可简化为输出一位整数。
- 对大于10的正整数,逻辑上可分为两部分:个位数字和个位左边的全部数字,可按以下步骤:
①输出个位数字。
②将个位除外的其他数字作为一个新的整数,重复①步骤的操作。
可将反向输出一个正整数的算法归纳为:
if(n为一位整数)
输出n;
else
{
输出n的个位数字;
对剩余数字组成的新整数重复”反向输出“操作;
}
接下来是C语言代码
#include<stdio.h>
void output(int x)
{
if(x>=0&&x<=9)
printf("%d",x);
else
{
printf("%d",x%10);
output(x/10);
}
}
void main()
{
int n;
scanf("%d",&n);
if(n<0)
{
n=-n;
printf("-");
}
output(n);
}
还记得之前学Python的时候,老师还说最好不要用递归,容易出错,所以没有认真学,结果学C的时候老师还没讲直接提问,说这个非常重要,简直就是一脸懵逼 ,完全不知道怎么回答。
我太难了
今天的文章C语言:函数的递归调用分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/30365.html