求一个递归程序观察递归调用的过程

求一个递归程序观察递归调用的过程,第1张

#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++语言编写程序,递归函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9383541.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存