C语言函数的简单递归调用

#include <stdio.h>
int age(int n);//外部声明

int main()
{
    printf("age=%d\n",age(5));//age=18--递归-输出第五个学生的年龄
    return 0;
}
int age(int n)
{
    //在调用一个函数的过程中又出现直接或者间接的调用该函数本身,称为递归调用
    int c;
    if (n==1) {
        c=10;
    }else{
    
        c=age(n-1)+2;//函数名字age在函数age内部出现就是递归调用
        
    }
    return c;

}
时间: 2024-08-03 23:46:15

C语言函数的简单递归调用的相关文章

函数的直接递归调用

我们来看这样一个例子. 程序功能: 将十进制数转化为二进制数的程序.用直接递归实现. #include <stdio.h>void f(int n) { if(n){ f(n/2); } else return; printf("%d",n%2); } void main(){ int a = 10; f(a); printf("\n");} 理解如下: (1).直接递归就是自己调用自己,其实可以理解为像是主函数调用子函数一样,子函数执行完了之后就返回主

C语言函数的一些简单总结

C源程序采用是函数模块式的结构,每一个程序都是由很多个函数组成的,函数是C源程序的基本模块,C语言不仅提供了极为丰富的库函数,他还允许用户自己根据需求创建需要的函数,然后用函数调用的方法来使用该函数,正式这种函数模块化的设计,使得程序的层次结构清晰,便于程序的编写.阅读和调试 main 函数在C语言中称为主函数,它可以调用其它函数,而不允许被其它函数调用.因此,C程序的执行总是从main函数开始,完成对其它函数的调用后再返回到main函数,最后由main函数结束整个程序.一个C源程序必须有,并且

函数的递归调用与二分法

一,什么是递归? 递归的作用可以完全取代循环,很多函数编程语言中习惯用递归来实现循环 1,递归算法: (1),'重复' ,凡是通过循环语句可以实现的,都可以用递归来实现 (2),'将问题分解成同类的子问题', 如持续循环的运算操作,持续循环的判断操作,他们的每次循环都是同样的一个'动作',这个动作就是一个子问题 2,函数的递归调用: 在调用一个函数的过程又直接或者间接的调用该函数本身,称之为递归调用. 递归必须满足两个条件: 1, 每进入下一次递归调用,问题的规模都应该有所减少 2, 递归必须有

递归调用与尾调用

// 普通递归函数的调用 时间复杂度为 O(n) function fn(num){ if(num === 1) return 1; return num * fn (num -1);}// 等同于 该函数耦合性更小function fn(num){ if(num === 1) return 1; return num * arguments.callee(num - 1);} console.log(fn(50)) // 120 // 尾调用函数 优化了递归调用 事件复杂度为O(1)funct

C语言函数的参数传递

C语言函数的参数传递 1.调用函数向被调用函数以形式参数传递 用户编写的函数一般在对其说明和定义时就规定了形式参数类型 ,因此调用这些函数时参量必须与子函数中形式参数的数据类型.顺序和数量完全相同.  注意:   当数组 作为形式参数向被调用函数传递时,只传递数组的地址,而不是将整个数组元素都复制到函数中去,即用数组名作为实参调用子函数,调用时指向该数组第一个元素的指针就被传递给子函数,用数组元素作为函数参数传递.当传递数组的某个元素时,数组元素作为实参,此时按使用其它简单变量的方法使用数组元素

C语言函数的递归调用

一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数.执行递归函数将反复调用其自身,每调用一次就进入新的一层. [示例]用递归计算 n!.阶乘 n! 的计算公式如下: 根据公式编程: long factorial(int n){ long result; if(n==0 || n==1){ result = 1; }else{ result = factorial(n-1) * n; // 递归调用 } return result; } 这是一个典型的递归函数.调用factoria

C语言中递归什么时候可以省略return引发的思考:通过内联汇编解读C语言函数return的本质

事情的经过是这样的,博主在用C写一个简单的业务时使用递归,由于粗心而忘了写return.结果发现返回的结果依然是正确的.经过半小时的反汇编调试,证明了我的猜想,现在在博客里分享.也是对C语言编译原理的一次加深理解. 引子: 首先我想以一道题目引例,比较能体现出问题. 例1: #include <stdio.h> /** 函数功能:用递归实现位运算加法 */ int Add_Recursion(int a,int b) { int carry_num = 0, add_num = 0; if (

C语言中递归什么时候能够省略return引发的思考:通过内联汇编解读C语言函数return的本质

事情的经过是这种,博主在用C写一个简单的业务时使用递归,因为粗心而忘了写return.结果发现返回的结果依旧是正确的.经过半小时的反汇编调试.证明了我的猜想,如今在博客里分享.也是对C语言编译原理的一次加深理解. 引子: 首先我想以一道题目引例,比較能体现出问题. 例1: #include <stdio.h> /** 函数功能:用递归实现位运算加法 */ int Add_Recursion(int a,int b) { int carry_num = 0, add_num = 0; if (b

从linux0.11中起动部分代码看汇编调用c语言函数

上一篇分析了c语言的函数调用栈情况,知道了c语言的函数调用机制后,我们来看一下,linux0.11中起动部分的代码是如何从汇编跳入c语言函数的.在LINUX 0.11中的head.s文件中会看到如下一段代码(linux0.11的启动分析部分会在另一部分中再分析,由于此文仅涉及c与汇编代码的问题,). after_page_tables: pushl $0 # These are the parameters to main :-) pushl $0 pushl $0 pushl $L6 # re