bk-Mr-ji

导航

Day5——函数与递归

函数:

函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。

您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。

应注意函数的名称、返回类型和参数、函数定义的实际主体。

C 标准库提供了大量的程序可以调用的内置函数。

 

包含:调用函数;(  printf  就是常用的调用函数)

当我们调用函数时,对其传入的参数和函数体内接收到的参数其实并不是同一个变量。

(调用函数时向函数传入的参数称作实际参数,简称实参,函数体内部用于接收外部调用时传入的参数的参数称为形式参数,简称形参。)

内部函数:如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,在函数名和函数类型的前面加 static

外部函数:如果在定义函数时,在函数的首部的最左端加关键字 extern,则此函数是外部函数,可供其它文件调用。

自定义函数;由自己写一个函数(需要声明和定义),

#include <stdio.h> 

int Max(int a, int b, int c)    //自定义
{ int max=a; if(b>max){ max=b; if(c>max){ max=c; } } else { if(c>max){ max=c; } } return max; } int main()
{ int x, y, z, maxOne; printf("请输入三个数字(空格分隔):"); scanf("%d%d%d",&x,&y,&z); maxOne=Max(x, y, z); //调用 printf("\n"); printf("最大数为:%d; \n",maxOne); return 0; }

 函数递归

合理运用函数嵌套(调用自身)达到大事化小小事化了的目的;
避免出现死循环导致栈溢出,要合理设置判断条件;

 

举个例子:
从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……'"

 

如果没有限制条件就会死循环,结果就是栈溢出,程序死掉;

#include <stdio.h>

int fibonacci(int n) 
{  
   if(n <= 2)  
     {  
         return 1;
     }  
   else  
     {      
         return fibonacci(n - 1) + fibonacci(n - 2);   //实现
     } 
}


int main()
{  
   int n;//第n项  
   scanf("%d", &n); 
   printf("%d\n", fibonacci(n)); 
   return 0; 
}

 

递归是一个简洁的概念,同时也是一种很有用的手段。但是,使用递归是要付出代价的。与直接的语句(如while循环)相比,递归函数会耗费更多的运行时间,并且要占用大量的栈空间。递归函数每次调用自身时,都需要把它的状态存到栈中,以便在它调用完自身后,程序可以返回到它原来的状态。未经精心设计的递归函数总是会带来麻烦。

posted on 2023-02-08 20:36  拾霏  阅读(74)  评论(0编辑  收藏  举报