#include<stdioh>
#include<mathh>
#include<stdlibh>
void printcba(long m)//c语言递归实现输入一个整数的每位输出
{
if(m<0) //判断输入值是否为负数,是负数输出负号
{
printf("%5c",'-');
m=-m;
}
if(m>=10){//判断是否已到数的开头,如果不满足则到,开始递归返回
m=m/10;
printcba(m);
printf("%5d",m%10);
}
}
void main(){
long x;
//clrscr();
system("cls");
printf("input x:");
scanf("%d",&x);
printcba(x10);//为了使有相同的子问题,初始化x10,如果不乘10则输入值末尾数不会显示输出
printf("\n");
}
函数调用自身, 直到满足一定条件return
下面仅保留关键代码
void perm(int list[], int k, int m){
int i;
int j;
if(k > m)
{
for (i=0; i<7; i++)
{
for (j=0; j<7; j++)
{
if (rest[i][j] == 0)//如果满足条件,递归调用结束,函数逐个返回
return;
}
}
}
else
{
for(i = k; i <= m; i++)
{
swap(&list[k], &list[i]);
perm(list, k + 1, m);//调用自己,当满足上面的条件后,调用自已的函数从这里返回,运行下面的代码,本函数结束,也返回,逐个返回到主函数
swap(&list[k], &list[i]);
}
}
}
1、在数学上,关于递归函数的定义如下:对于某一函数f(x),其定义域是集合A,那么若对于A集合中的某一个值X0,其函数值f(x0)由f(f(x0))决定,那么就称f(x)为递归函数。 在编程语言中,把直接或间接地调用自身的函数称为递归函数。函数的构建通常需要一个函数或者一个过程来完成。
2、递归函数 是建立在嵌套的基础上的,只不过嵌套调用了自己本身,而且经常不是显式调用。一个含直接或间接调用本函数语句的函数被称之为递归函数,它必须满足以下两个条件:
1) 在每一次调用自己时,必须是(在某种意义上)更接近于解;
2) 必须有一个终止处理或计算的准则。
例如一个非法的递归(嵌套)调用:
void ff(){
ff();
}
int main()
{
ff();
system("pause");
return 0;
}
这么理解
if(n<10) 从这里开始递归 你也理解递归到10是吧 当n=10的时候
if语句不执行 直接执行输出语句 打印出10
也就是说这个时候Count(10)执行完成 但是Count(9)这里的输出语句由于递归还没执行那!! Count(10)执行完了才轮到它 这个时候才打印出9 以此类推 不知道你明不明白
这是一个先序遍历递归算法void
preorder(struct
bitree
root){
struct
bitree
p;
p=root;
if(p!=NULL)//不为空树
{
printf("%d\n",p->data);//先访问数据区,即根结点
preorder(p->lchild);//再访问左孩子(树)
preorder(p->rchild);//再访问右孩子(树)
}
}比如一颗完全二叉树,层次遍历为(A)(BC)(DEFG)(HIJKLMNO)按照这的先序遍历过程为:第一次调用,所以访问到A<进入第一层递归>访问以B为根结点的树(A的左子树),所以访问到B<进入第二层递归>访问以D为根结点的树(B的左子树),所以访问到D<进入第三层递归>访问以H为根结点的树(D的左子树),所以访问到H<进入第四层递归>访问H的左子树,因为H是叶子结点(即左孩子指针P=NULL),返回第三层递归,<再进入第四层递归>访问H的右子树,因为H是叶子结点(即右孩子指针P=NULL),返回第三层递归到这里H的左右子树访问完,退回到第二层递归<再进入第三层递归>访问以I为根结点的树(D的右子树),所以访问到I<进入第四层递归>访问I的左子树,因为I是叶子结点(即左孩子指针P=NULL),返回第三层递归,<再进入第四层递归>访问I的右子树,因为I是叶子结点(即右孩子指针P=NULL),返回第三层递归到这里I的左右子树访问完,退回到第二层递归到这里D的左右子树访问完,退回到第一层递归<再进入第二层递归>访问以E为根结点的树(B的右子树),所以访问到E这样依次下去最后访问到O
以 C 语言为例,举一个最最经典的例子就是:计算一个整数的阶乘。
#include <stdioh>
int my_jiecheng( int ) ; / 计算阶乘子函数原型说明 /
int main( )
{
int num, result = 0 ;
scanf("%d", &num) ; / 从键盘输入一个整数 num /
result = my_jiecheng(num) ; / 调用计算阶乘子函数 my_jeicheng( ),并将最终的结果保存在 result 变量中 /
printf("result = %d\n", result ) ; / 输出最后的计算结果 /
return 0 ;
}
int my_jiecheng( n )
{
if( n == 1 ) / 定义: 1!== 1,即:1 的阶乘等于 1 /
return (1) ; / n == 1,返回 1 /
else / 递归调用 my_jiecheng( ) 子函数 /
return( n my_jiecheng(n-1) ) ; / 否则的话,n != 1,递归调用 n(n-1) ! /
}
以上就是关于求一个递归程序观察递归调用的过程全部的内容,包括:求一个递归程序观察递归调用的过程、c语言程序函数递归调用看不懂了 上次您的解答很好 能帮忙看看吗、用C++语言编写程序,递归函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)