C语言:函数的递归调用

C语言:函数的递归调用一、函数递归调用的定义:函数直接或间接的调用自身叫函数的递归调用。二、采用递归方法来解决问题时,必须符合以下两个条件:(1)、可以把要解决的问题转化为一个规模较小的新问题,而这个新问题的解决方法仍与原来的解决方法相同。即函数的自我调用(2)、必定要有一个明确的结束递归的条件。即递归出口总而言之,可归纳为:大事化小,小事化了三、递归调用过程(两个阶段):递…

C语言:函数的递归调用"

一、

  • 函数递归调用的定义:函数直接或间接的调用自身叫函数的递归调用。

二、

  • 采用递归方法来解决问题时,必须符合以下两个条件:

(1)、可以把要解决的问题转化为一个规模较小的新问题,而这个新问题的解决方法仍与原来的解决方法相同。

  • 即函数的自我调用

(2)、必定要有一个明确的结束递归的条件。

  • 即递归出口

总而言之,可归纳为:

大事化小,小事化了

三、

递归调用过程(两个阶段):

  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

分析:

  1. 简化问题:设要输出的正整数只有一位,则”反向输出“问题可简化为输出一位整数。
  2. 对大于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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注