当前位置:首页 » 编程语言 » c语言递归教程

c语言递归教程

发布时间: 2022-07-03 15:07:48

c语言怎么用递归调用函数的方法求n的阶乘

1、打开VC6.0软件,新建一个C语言的项目:

㈡ C语言中的递归问题..

楼主的程序和楼上的回答有误。
这里用递归实现连乘,不需要全局变量保存什么信息,递归是用栈来实现语句和返回值的存放,详细原理建议楼主找一本C语言教程里面都有讲。
此外楼主main函数中对fact函数的声明以及fact函数的定义中需要加上参数类型声明。正确的代码如下:

#include <stdio.h>

void main()
{
int i;
int fact(int); // 这里要有函数参数类型声明int
for(i=0;i<5;i++)
printf("\40:%d!=%d\n",i,fact(i));
}

int fact(int j)
{
int sum;
if(j==0)
sum=1;
else
sum=j*fact(j-1); // 函数递归调用
return sum;
}

问题补充:
int fact(int); // 这里要有函数参数类型声明int 但是下面我用的fact(i),而i已经定义为int 型,前面还是一定要先对参数进行定义么~?

在main中的int fact(int);语句是对fact函数进行声明,要声明的原因是编译器对代码编译的时候是从上到下进行扫描的,而fact函数的定义是在main函数之后,因此在main中调用fact(i)之前,必须先声明fact函数,也就是告诉编译器fact函数是个什么样子。
声明的时候必须指明函数的返回类型、函数名、函数参数及类型。因此int fact(int);是必要的。
如果fact函数的定义
int fact(int j)
{
int sum;
if(j==0)
sum=1;
else
sum=j*fact(j-1); // 函数递归调用
return sum;
}
是放在main函数之前的,那么main函数中调用fact(i)之前不需再进行声明,也就是int fact(i);语句可以不加。因为编译器编译到fact(i)调用时已经知道了fact函数的定义。

建议楼主对 变量的“声明”与“定义”、以及 函数的“声明”与“定义”这几个概念要区分一下。

㈢ 讲一下c语言中递归函数的使用方法

相当于循环,要有判断条件,传递进去的参数要变化,满足条件调用自身,不满足条件就开始一层一层返回。简单例子:
int
f(int
i){
int
sum=0;
if(i>0)
sum+=f(i-1);
return
sum;
}
main(){
int
a=10;
printf("%d",f(a));
}

㈣ c语言递归详解

没啥详解,就是函数自己调用自己。整个调用关系会铺在一个栈里。递归函数一定要有一个退出出口。

㈤ c语言递归的方法是什么

思路:使用递归主要有两点需要注意,一个是递归计算公式,二是递归跳出条件。 参考代码: #includeint fun(int n){if(n==0) return 0;//递归跳出条件 return n+fun(n-1);//递归计算公式 }int main(){int n;scanf("%d",&n); printf("%d\n",fun(n)

㈥ C语言的递归过程!

这个东西首先,你要确定递归出口。没有出口,你就算不出结果的。
从你给出的代码片段来看,出口应该是n==0,也就说rfcat(0)=1这样。
那么所谓的第一层到底哪里算第一层呢?
首先程序从主函数开始运行,系统建立了一个存储运行状态的栈。在系统堆栈的最下面,放进main记录。记录下从哪里进入的这个函数。
在运行到rfcat(5)这行时,进入这个rfcat函数。此时,n==5。系统栈里,压入rfcat记录。
然后在函数里,运行到ans=n*rfact(n-1)时,又遇到了rfcat这个函数,此时,将n-1带入了这个函数,“递归”调用函数。此时,又在系统栈里压入了一个rfcat记录。
就这样重复重复,直到发现出口。就是在n==0时,return了一个值,1。这时,这里的return,不仅是代表返回值,更是说在系统栈里的函数结束了,要返回上一个函数里运行。弹出这个记录的同时,得到了进入函数时程序的下一步该进行的动作。
然后就这样一步步的return。直到main的最后的return 0;结束整个程序。

㈦ c语言怎么用递归函数

首先是要这个求解的问题,适合用递归方法来进行求解。找到这个递归解法结束递归的条件。递归函数中,首先第一个语句就是如果满足递归条件,就直接返回确定的值,否则返回使用递归方法求解的表达式。

热点内容
数据库删除实例 发布:2025-08-23 14:21:27 浏览:314
qqandroid反编译 发布:2025-08-23 14:02:23 浏览:907
高级语言编译有哪些 发布:2025-08-23 13:23:49 浏览:573
win32编译 发布:2025-08-23 13:19:16 浏览:657
备份数据库日志 发布:2025-08-23 13:07:05 浏览:517
php模块开发 发布:2025-08-23 12:58:43 浏览:922
java读写数据库 发布:2025-08-23 12:41:40 浏览:401
php跨站脚本攻击漏洞 发布:2025-08-23 12:34:37 浏览:154
编译安装mysql时找不到文件 发布:2025-08-23 12:14:56 浏览:657
phpget号 发布:2025-08-23 12:09:52 浏览:737