C语言函数。帮我看看这个自定函数错哪了。想用递归

我想知道函数具体执行过程以忣在这个过程中的内存分配


第一次递归的时候把pt-》next复赋值给pt;这个pt是否和原先那个pt一样?

这里每次递归只为传入参数(PNODE pt)分配一个保存指針的内存。每次的pt和之前的pt是不同的

每一次递归分配的内存是不同的?但是变量却是相同的。
这个貌似有点...............................
变量是不同的,只是变量名一样
变量名是给程序员看的。编译之后系统里面都是地址。

1、这是个错误的程序因为递归函数应该至少要有两个分支,而你的遞归函数只有一个分支(if 之外没有任何对pt->next的操作)

3、ptree 也是指针你没有初始化它就直接当做参数给 f(),这样的做法是很危险的

 
 这次对嘛把玳码贴完整才利于分析问题啊。 看来楼主对C语言函数的函数栈不是很了解了C语言函数函数栈包含了 函数地址、参数、局部变量。你的代碼里并没有涉及到内存的动态分配只是一个函数栈的问题。递归就是利用函数栈的原理来处理问题的最先调用的最后返回。比如你这裏的遍历就是:最先返回的是打印叶子节点的函数但是由于printf写在了PreTraverseBTree前面,所以才有了从根往叶子节点打印的效果由于递归利用函数栈,所以它每次调用它自己后压栈的位置(地址)就不同了当然压栈的值也随着参数而不同。
还有就是:你这里只有遍历函数没有构造函数,这样你是无法测试的当然,如果你有构造函数只是没贴出来就另谈了。
至于pt它只是一个结构体指针变量,它储存的是某个节點结构体的地址这个你要注意。既然是变量它的值当然随着每次的赋值而变化了。
}
其实递推是最好的实现方式因為他不会出现溢出的情况; 
如果不用递推只好用通乡方式的方法,计算了:
但这样可能会溢出必须要限定an的范围:
an=1/√5[(1/2+√5/2)^ n-(1/2-√5/2)^ n]
(n=1,2,3.....)
全部
}

我要回帖

更多关于 C语言函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信