函数创建

#include<stdio.h>

void function_name(int, int);//在前面定义一个函数类型,可以不用传递实参

int main() {
    function_name(1, 1);//在这里进行赋值
}

void function_name(int a, int b) {//在这里对函数进行赋值,并创建俩个实参
    printf("hello");

}

让我们来注意一下区别:

void digui_function()中,这个函数不用返回任何值,也就是说,其不用return任何类型;
int digui_function()中,这个函数需要返回一个数据类型;

接下来是最重要的递归:

#include<stdio.h>
int digui_function(int n);
int main(){
  printf("%d",digui_function(5))}
int digui_function(int n){
  if(n==1)return 1;
  return digui_function(n-1)*n;
  

这个递归的本质就是将return语句中的digui_funtion(n-1)进行循环,直到return1截止,至此,digui_function(n-1),的目的就已经完成了,这时再次使用digui_function(n-1)*n进行数据返回,注意,在digui_function没有进行到return1时,*n这句代码,只起到过渡作用,在return语句中才再次时候用。

反思:

  1. 首先,这仅仅是一个阶乘的算法我们甚至可以对最后一行代码这样理解:先进行return前面的递归,后再使用return进行回 值。
  2. 那如果是累加呢,很明显,我们只要将*n变成+n就可以了。但请一定记住,如果
  3. 一个小小的改变,如果我们写这样一个代码呢:
#include<stdio.h>
int Fabb_function(int n){


    if(n==1)return 1;


    return Fabb_function(n-1)+3;
}
int main(){
    printf("%d",Fabb_function(4));
}

此时,如果大家学过二叉树的话(或者有偷学过树的概念),就会很容易的发现,所谓的递归,在一定程度上就是特殊的树,树的分叉取决于我们想将函数分为几个递归"分叉"罢了。比如:(这里使用python进行展示)

class FatherTree:  
    def __init__(self, tree):  
        if tree > 0:  
            self.tree = tree - 1  
            self.father = FatherTree(self.tree)  
        else:  
            self.tree = tree  
            self.father = None

很明显,这种就属于“一根直肠通大脑”形,如果“父亲”值为1,那么就算递归一万次也是1,因为他没有什么数据的变化。

下面是单方面进行二叉树的:

class Node:  
    def __init__(self, value):  
        self.value = value  
        self.left = None  
        self.right = None  
  
def subtract_one(node):  
    if node is None:  
        return None  
    if node.right is None:  
        node.right = subtract_one(node.left)  
        return node  
    node.right = subtract_one(node.right)  
    return node  
  
root = Node(10)  
root.left = Node(5)  
root.right = Node(15)  
root.right.left = Node(13)  
root.right.right = Node(17)  
  
print("Original tree:")  
print_tree(root)  
  
root = subtract_one(root)  
  
print("\nAfter subtracting one:")  
print_tree(root)  
  
def print_tree(node):  
    if node is None:  
        return  
    print(node.value, end=" ")  
    print_tree(node.left)  
    print_tree(node.right)

下面是均进行递归操作的:

class Node:  
    def __init__(self, value):  
        self.value = value  
        self.left = None  
        self.right = None  
  
def subtract_one(node):  
    if node is None:  
        return None  
    node.value -= 1  
    if node.value < 0:  
        node.left = subtract_one(node.left)  
        node.right = subtract_one(node.right)  
    return node  
  
root = Node(10)  
root.left = Node(5)  
root.right = Node(15)  
root.right.left = Node(13)  
root.right.right = Node(17)  
  
print("Original tree:")  
print_tree(root)  
  
root = subtract_one(root)  
  
print("\nAfter subtracting one:")  
print_tree(root)  
  
def print_tree(node):  
    if node is None:  
        return  
    print(node.value, end=" ")  
    print_tree(node.left)  
    print_tree(node.right)

4.我们来进行一个提升:

#include<stdio.h>

int Fabb_function(int n) {
    int make_count;
    scanf_s("%d",&make_count); 
    if (n == 1)return 1;//count表示步幅,就是等差值;
    count++;
    return Fabb_function(n - 1) + count;
}

int main() {
    int number;
    scanf_s("%d",&number);
    printf("%d", Fabb_function(number));//表示可以得出的等差数量的和
}

这个程序问题很多,如果将来有机会的话会继续修改,大家可以对这个程序进行分析,就会发现很有意思,比如如果不初始化make_count会怎么样?(如果不是用scanf_s),能不能作出他的函数呢?大家可以试一下,蛮有意思的。

(程序问题很多,这里仅仅只作为作者复习用,错误颇多请见谅)

全部评论

相关推荐

01-04 07:53
门头沟学院 C++
心愿便利贴:工作了以后回头再看待这个问题,从客观的视角来讲是因为每个人对自己的要求不同,学习好的人对自己的要求很高,所以觉得考不好就天塌了,认为自己学习好并且值得一份好工作的人也是一样,找不到符合自己预期的工作肯定也会觉得是侮辱,牛客上有很多名校大学生,肯定会存在这种好学生心态啊,“做题区”从来都不是贬义词,这是大部分普通人赖以生存的路径,这个有什么好嘲讽的,有“好学生心态”没有错,但是不要给自己太大的压力了
点赞 评论 收藏
分享
喵_coding:年底缺人是短视频营造出来的 而且一般说的也很宽泛 不是特指后端
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务