当前位置:网站首页>1142_ SiCp learning notes_ Functions and processes created by functions_ Linear recursion and iteration
1142_ SiCp learning notes_ Functions and processes created by functions_ Linear recursion and iteration
2022-07-07 07:31:00 【grey_ csdn】
All learning summary :GitHub - GreyZhang/g_SICP: learn SICP and hack lisp.
The first said , The title is named after the translation and adjustment of text information . If combined C language , It is more suitable to call it subfunction or function function combined by subfunction .
This is the opening word of this chapter , But there are some interesting things to think about . such as , As a professional programmer, you need to have a more vivid and specific thinking ability . In the process of becoming a professional , Must learn how to deal with different scenes to deal with the image 、 Specific thinking . We need to describe the whole function in the way of this sub function 、 Global information and behavior . natural , Many sub functions will have their own state information to be maintained .
This is a recursive factorial function implementation , The following figure is a specific description of each step using the replacement method .
And this , It is an iterative implementation and deployment description . Judge the difference between recursion and iteration , The main difference is whether the intermediate state of the program is automatically processed by the parser rather than whether the function is called by itself . This point , I didn't think deeply when dealing with other designs before .
According to this idea , In fact, you can design one according to the gourd and the gourd C Language version of “ Recursive iteration ”:
#include
#include
void fac(uint32_t n, uint32_t *p_counter, uint32_t *p_result)
{
if(*p_counter > n)
{
/* result is stored to the memory @ p_result */
return;
}
else
{
*p_result *= *p_counter;
*p_counter += 1U;
fac(n, p_counter, p_result);
}
}
int main(void)
{
uint32_t n = 5;
uint32_t c = 1U;
uint32_t r = 1U;
fac(n, &c, &r);
printf("result is %d\n", r);
n = 10;
c = 1U;
r = 1U;
fac(n, &c, &r);
printf("result is %d\n", r);
n = 12;
c = 1U;
r = 1U;
fac(n, &c, &r);
printf("result is %d\n", r);
return 0;
}
test :
In the test above , Added one python Comparison of . among ,python Is a completely recursive implementation :
def fac(n):
if n == 1:
return 1
else:
return n * fac(n - 1)
print(fac(5))
print(fac(10))
print(fac(12))
Judging from the test results , Within a certain parameter range , This C The version calculation of is still correct .
As the level of recursion increases , The information that the parser needs to track increases linearly . This process is called linear recursion . As the depth of recursion increases , More and more information needs to be managed and maintained . therefore , The above two processing ideas : Recursion and iteration should not only focus on the processing depth in the replacement model when comparing the resource consumption of their algorithms , We should also pay attention to the horizontal expansion width . Vertical represents mainly time consumption , The horizontal actually involves the consumption of time and storage resources .
But recursion does not necessarily meet such conditions , This is why the recursion discussed here is specifically proposed as linear recursion . And through the expansion of the end part , In fact, there is also a recursive method with basically constant resource consumption , For example, tail recursion . For me, , This is indeed another new concept .
边栏推荐
- Abnova immunohistochemical service solution
- Fullgc problem analysis and solution summary
- Role of virtual machine
- Interviewer: what development models do you know?
- Simple example of ros2 planning system plansys2
- 深度学习花书+机器学习西瓜书电子版我找到了
- Mobx knowledge point collection case (quick start)
- Redis data migration
- Apache AB stress test
- 【云原生】内存数据库如何发挥内存优势
猜你喜欢
Lm11 reconstruction of K-line and construction of timing trading strategy
三、高质量编程与性能调优实战 青训营笔记
关于二进制无法精确表示小数
Implementing data dictionary with JSP custom tag
The annual salary of general test is 15W, and the annual salary of test and development is 30w+. What is the difference between the two?
Le Service MySQL manque dans le service informatique
The currently released SKU (sales specification) information contains words that are suspected to have nothing to do with baby
English translation is too difficult? I wrote two translation scripts with crawler in a rage
Non empty verification of collection in SQL
Pass parent component to child component: props
随机推荐
Abnova immunohistochemical service solution
Select the product attribute pop-up box to pop up the animation effect from the bottom
2、 Concurrent and test notes youth training camp notes
普通测试年薪15w,测试开发年薪30w+,二者差距在哪?
JS small exercise
Blue Bridge Cup Birthday candles (violence)
[Linux] process control and parent-child processes
C language (high-level) data storage + Practice
Outlier detection technology of time series data
Apache AB stress test
js小练习
URP - shaders and materials - light shader lit
Bindingexception exception (error reporting) processing
Invalid table alias or column reference`xxx`
抽絲剝繭C語言(高階)數據的儲存+練習
Paranoid unqualified company
[semantic segmentation] - multi-scale attention
【Liunx】进程控制和父子进程
Databinding exception of kotlin
FullGC问题分析及解决办法总结