<11>【了解】递归函数概述及构成条件+【理解】递归应用举例

【了解】递归函数概述及构成条件

递归函数:

        在函数的内部存在调用当前函数本身的语句,这个函数就是递归函数

    递归调用:

        递归函数中,调用自己的操作,递归调用

    递归调用注意:

        1)主调函数就是被调函数
        2)在递归函数中应该存在能够让递归结束的条件

    构成递归的条件:

        1)存在自己调用自己
        2)存在一个条件 ,能够让递归结束(否则,是死循环)
           n==1 age = 10

        3)能够找到一个规律,让要解决的问题的规模缩小

    递归的阶段:

        1)递推阶段

           内存栈的特点:先进后出,

        2)回归迭代阶段

           迭代计算,一步步迭代返回值
 1 #include <stdio.h>
 2
 3
 4 //定义一个函数
 5 //计算年龄的方法
 6 int getAge(int n){
 7
 8     int age;
 9     //如果 n == 1  年龄是10
10     if (n==1) {                    //到这步执行的时候就是迭代计算阶段
11         //n==1 表示第一个人,他的年龄是10
12         age = 10;
13     }else{
14         //如果不是第一个人,当前这个人得年龄 = 前一个人(n-1)得年龄+2
15         age = getAge(n-1)+2;        //递推阶段
16     }
17
18     return age;
19
20 }
21
22
23 int main(int argc, const char * argv[]) {
24
25     int age = getAge(5);
26     printf("age = %d\n",age);
27
28     return 0;
29 }
age = 18

---------------------------------------------

【理解】递归应用举例

用递归法求n的阶乘
时间: 2024-11-05 18:57:12

<11>【了解】递归函数概述及构成条件+【理解】递归应用举例的相关文章

一个自然数在1700和1800之间,且被5除余3,被7除余4,被11除余6,求符合条件的数

昨天晚上看了一道逻辑题:一个自然数在1700和1800之间,且被5除余3,被7除余4,被11除余6,求符合条件的数.题目后面写着,有人看了几分钟便给出了答案.我很好奇,此人是如何解答的. 我自己先琢磨了下,拿笔算了半天,最后一个巧合的情况下,得到了答案.此题的一个关键且明显的推论是:能被5除余3的数,肯定最后一位是3或者8.那么接下来怎么推呢?我从网上搜集了答案. 方案1: 这个数被5除余3,则此数个位数为3或8, 设这个数十位为x,则此数可表达为1703+10x,或1708+10x当此数为17

C++ 11 并发: 正确 的使用条件变量-condition_variable

1. 标准实例 http://en.cppreference.com/w/cpp/thread/condition_variable 在cppreference提供的对 cv的例子,condition_variable和mutex都是全局变量.但是我们的程序不可能到处使用全局变量.如果把condition_variable和mutex的定义放到main函数中进去,作为局部变量,并且循环几次,会发现第一次同步OK,后面的就没有那么好的运气了. 因此对于局部变量中如何正确的使用condition_v

C++11线程指南(七)--资源竞争条件

1. 接口设计1 下面例子使用vector实现了一个栈.两个线程轮流从中弹出元素. #include <iostream> #include <thread> #include <mutex> #include <string> #include <vector> std::mutex myMutex; class Stack { public: Stack() {}; ~Stack() {}; void pop(); int top() { r

傻瓜式理解递归之php递归

写程序这么久了,有时候别人会问道一些算法比如排序啊,递归啊,总是不知道该怎么去说,今天就来整理一下,让更多的人去傻瓜式的理解递归.递归在网络上有很多定义,但有这么一句话听的最多:递归就是自己调用自己!引用百科的一个故事去理解: 从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?'从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?--'" 这样的故事是不是在做

java数据结构与算法之递归思维(让我们更通俗地理解递归)

[版权申明]转载请注明出处(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/53452971 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) java数据结构与算法之栈(Stack)设计与实现 j

使用Python语言理解递归

递归 一个函数在执行过程中一次或多次调用其本身便是递归,就像是俄罗斯套娃一样,一个娃娃里包含另一个娃娃. 递归其实是程序设计语言学习过程中很快就会接触到的东西,但有关递归的理解可能还会有一些遗漏,下面对此方面进行更加深入的理解 递归的分类 这里根据递归调用的数量分为线性递归.二路递归与多重递归 线性递归 如果一个递归调用最多开始一个其他递归调用,我们称之为线性递归. 例如: def binary_search(data, target, low, high): """ 二分查

如何真正的理解递归?

/* * 理解递归的真正含义:当运行到调运自身时先停止执行后边的代码 重新调用自身当所有调用自身的代码运 * 行完成后再重新按栈的形式重新由后向前一次调用自身之后的代码 * 特点:递归调用很容易导致占用大量的空间,递归的效率不高 * * 下列代码中通过输出n的值理解递归调用其实就是堆栈的运用使用递归很容易造成堆栈溢出 * */ package arithmetic; public class recursion { public static void main(String[] args) {

python之理解——递归

古之欲明明德于天下者,先治其国:欲治其国者,先齐其家:欲齐其家者,先修其身:欲修其身者,先正其心:欲正其心者,先诚其意:欲诚其意者,先致其知,致知在格物.物格而后知至,知至而后意诚,意诚而后心正,心正而后身修,身修而后家齐,家齐而后国治,国治而后天下平. 这是从林海峰博客里面copy的.很好的解释了,python函数的递归. 那什么是递归? 在函数内部,可以调用其他函数.如果在调用一个函数的过程中直接或间接调用自身本身 def digui(n): print(n) digui(n) digui(

一个嵌套很多层的列表,如l=[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]]],用递归取出所有的值

'''一个嵌套很多层的列表,如l=[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]]],用递归取出所有的值''' l=[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]]] def get(seq): for item in seq: if type(item) is list: get(item) else: print(item) get(l) 原文地址:https://www.cnblogs.com/