c语言递归函数好难懂吗 c语言递归函数的例子

不懂c语言中递归函数,求教...

n=1时;c=age(5-1)+2=c+2=16+2=18;

创新互联建站是一家集网站建设,绥阳企业网站建设,绥阳品牌网站建设,网站定制,绥阳网站建设报价,网络营销,网络优化,绥阳网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

n=1时;c=age(4-1)+2==c+2=14+2=16;

n=1时;c=age(3-1)+2=c+2=12+2=14;

n=1时;c=age(2-1)+2=c+2=10+2=12;

n=1时,c=10;

先要得到c的值才可以调用,只有n=1的时候才得到c的具体的值;再倒推出n=5的时候c的值;

C语言递归搞不懂

这个程序有问题:这个程序是一个无穷循环。

原因:每次调用f(n)的时候,在函数内部会把n重置为1;然后满足n4,之后调用f(2);

在f(2)中,n被重置为1,然后满足n4,之后调用f(2);

……

所以用这个程序来理解递归会越来越糊涂。

递归一般满足两个条件:

1)停止机制。必须在一定的条件下函数是可以停止的,也可以称为初始条件。

2)满足一定条件下递归调用。

把你的函数改一下:

f(int n)

{if(n==1)

printf("%d times hello world!\n",n); //递归停止的条件

if(n1)

f(n-1);//进行条件判断,并进行递归调用。函数执行到此并不能向下执行,而是执行f(n-1)

printf("%d times hi world!\n",n);

}

比如初始f(4),开始执行不满足n==1,所以向下执行到if(n1),满足条件,调用f(3),照这样执行下去,直到f(1),执行if(n==1) printf("%d times hello world!\n",n);然后回到f(2)执行if(n1) f(n-1);后面的那个printf("%d times hi world!\n",n);语句,然后回到f(3),再然后回到f(4)。

递归其实这样用很浪费,效率很低,而且不容易理解。可以找一下用递归求解等比或者等差数列的例子,很能说明递归的应用。

c语言程序函数递归调用看不懂了 上次您的解答很好 能帮忙看看吗

函数调用自身, 直到满足一定条件return

下面仅保留关键代码

void perm(int list[], int k, int m)

{

int i;

int j;

if(k  m)

{

for (i=0; i7; i++)

{

for (j=0; j7; 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]);

}

}

}

C语言的递归好难理解,谁能详细解释下

可以自由转载,但请注明以下内容,谢谢合作!

作者:Enoch Wang 引用自:;

所谓递归,简而言之就是应用程序自身调用自身,以实现层次数据结构的查询和访问。 递归的使用可以使代码更简洁清晰,可读性更好(对于初学者到不见得),但由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多,而且,如果递归深度太大,可能系统资源会不够用。

往往有这样的观点:能不用递归就不用递归,递归都可以用迭代来代替。

诚然,在理论上,递归和迭代在时间复杂度方面是等价的(在不考虑函数调用开销和函数调用产生的堆栈开销),但实际上递归确实效率比迭代低,既然这样,递归没有任何优势,那么是不是就,没有使用递归的必要了,那递归的存在有何意义呢?

万物的存在是需要时间的检验的,递归没有被历史所埋没,即有存在的理由。从理论上说,所有的递归函数都可以转换为迭代函数,反之亦然,然而代价通常都是比较高的。但从算法结构来说,递归声明的结构并不总能够转换为迭代结构,原因在于结构的引申本身属于递归的概念,用迭代的方法在设计初期根本无法实现,这就像动多态的东西并不总是可以用静多态的方法实现一样。这也是为什么在结构设计时,通常采用递归的方式而不是采用迭代的方式的原因,一个极典型的例子类似于链表,使用递归定义及其简单,但对于内存定义(数组方式)其定义及调用处理说明就变得很晦涩,尤其是在遇到环链、图、网格等问题时,使用迭代方式从描述到实现上都变得不现实。 因而可以从实际上说,所有的迭代可以转换为递归,但递归不一定可以转换为迭代。

采用递归算法需要的前提条件是,当且仅当一个存在预期的收敛时,才可采用递归算法,否则,就不能使用递归算法。

递归其实是方便了程序员难为了机器,递归可以通过数学公式很方便的转换为程序。其优点就是易理解,容易编程。但递归是用栈机制实现的,每深入一层,都要占去一块栈数据区域,对嵌套层数深的一些算法,递归会力不从心,空间上会以内存崩溃而告终,而且递归也带来了大量的函数调用,这也有许多额外的时间开销。所以在深度大时,它的时空性就不好了。

而迭代虽然效率高,运行时间只因循环次数增加而增加,没什么额外开销,空间上也没有什么增加,但缺点就是不容易理解,编写复杂问题时困难。

因而,“能不用递归就不用递归,递归都可以用迭代来代替”这样的理解,Enoch不敢苟同,还是辩证的来看待,不可一棍子打死。

参考资料:


网页标题:c语言递归函数好难懂吗 c语言递归函数的例子
文章URL:http://azwzsj.com/article/ddosiph.html