C语言递归问题的分析? 八皇后问题递归法流程图

152℃ DOMINICK

C语言递归问题的分析?八皇后问题递归法流程图

C语言中的递归问题

#include<stdio.h>

main()

{

int CalDn(int m);

int n;

printf("please input n :");

scanf("%d",&n);

printf("Dn is :%d\n",CalDn(n));

}

int CalDn(int m)

{

if(m==1) return 0;

else if(m==2) return 1;

else return (m-1)*(CalDn(m-1)+CalDn(m-2));

}

C语言问题:递归的解释:

分析一下dectobin(8)的调用流程:

进入dectobin(8) : 8>1为真,于是调用dectobin(8/2)就是dectobin(4)

--->dectobin(4) : 4>1为真,接着调用dectobin(4/2)即dectobin(2)

--->dectobin(2) : 2>1为真,调用dectobin(1)

--->dectobin(1) : 1>1为假,于是printf(1%2),然后返回到dectobin(2)中执行。因为dectobin(1)是在dectobin(2)中调用的。

--->dectobin(2) : 接着调用printf(2%2),然后返回到dectobin(4)

--->dectobin(4) : 接着调用printf(4%2),然后返回到dectobin(8)

--->dectobin(8) : 接着调用printf(8%2),然后返回。整个递归过程完成,返回到main函数中。

你再看一下printf的顺序:

printf(1%2) ---- 1

printf(2%2) ---- 0

printf(4%2) ---- 0

printf(8%2) ---- 0

正好是1000

c语言中的递归问题?

你这个不是递归把 递归是一个函数一直调用它前一个自己的值,直到一个真正的值被调用

我还不明白你这里的意思 你关系有3 1说明1在3后面 怎么又输出的是3在1后面

C语言递归的问题

多用你就可以理解了,

int c(int x,int y)

{

int z;

if((y==1)||(y==x+1))return(1);

z=c(x-1,y-1)+c(x-1,y);

return(z);

其中z=c(x-1,y-1)+c(x-1,y);这句是退出循环的条件。

可以这样理解如下:

int f(int a)

{

int s=1;

while(a<=1)/*假如a=5*/

s*=f(a-1);

}

/*这里f(a-1)就是一个退出循环的条件*/

/*你可以看作s*=f(5-1)*f(4-1)*f(3-1)*f(2-1)=4*3*2*1=24*/

一个个的递下去又一个个推上来,就像二L的一样。