C:用递归及非递归解决迷宫问题

以下是现有的代码,但是递归放在里面出现错误,求大神给我改改。
#include
#include
#define N 39
#define M 39
int X;

int maze[N+2][M+2];
/******递归函数定义*******/
typedef struct {
int x,y;
}Dj;
Dj move[4];

/******非递归函数定义*******/
struct point{

int row,col,predecessor;
}queue[512];
int head=0,tail=0;

/******* 手动生成迷宫函数**********/
void shoudong_maze(int m,int n)
{
int i,j;
printf("\n\n");
printf("请按行输入迷宫(0表示通路,1表示障碍,不包括墙,中间用空格隔开):\n\n");
for(i=0;i<m+2;i++)
for(j=0;j<n+2;j++)

scanf("%d",&maze[i][j]);
}

/******* 自动生成迷宫函数**********/
void zidong_maze(int m,int n)
{
int i,j;
printf("\n迷宫正在生成,请稍后。\n\n");
system("pause");
for(i=1;i<m+1;i++)
for(j=1;j<n+1;j++)
maze[i][j]=rand()%2;
//由于rand()产生的随机数是从0到RAND_MAX(最大)
//RAND_MAX是定义在stdlib.h中的,其值至少为32767)
//要产生从X到Y的数,只需要这样写:k=rand()%(Y-X+1)+X;
for(i=0;i<m+2;i++)
{
maze[0][i]=1;
maze[m+1][i]=1;
}
for(j=0;j<n+2;j++)
{
maze[j][0]=1;
maze[j][n+1]=1;
}
}

/********将迷宫打印成图形*********/
void print_maze(int m,int n)
{

int i,j;
printf("\n迷宫生成结果如下:\n\n");
printf("迷宫入口(1,1)\n");
printf(" ↓");
for(i=0;i<m+2;i++)
{

printf("\n");
for(j=0;j<n+2;j++)
{

if(maze[i][j]==0)
printf("□");
if(maze[i][j]==1)
printf("■");
}
}

printf("→\n");
printf("迷宫出口:(%d,%d)\n",m+1,n+1);
}

/**********打印迷宫路径 (若存在路径)***********/

void result_maze(int m,int n)
{

int i,j;

printf("迷宫通路(用☆表示)如下所示:\n\t");

for(i=0;i<m+2;i++)
{

printf("\n");

for(j=0;j<n+2;j++)
{

if(maze[i][j]==0||maze[i][j]==2)
printf("□");

if(maze[i][j]==1)
printf("■");

if(maze[i][j]==3)
printf("☆");

}

}

}

/*******入队*********/
void enqueue(struct point p)
{

queue[tail]=p;

tail++;
}

/*******出队*********/
struct point dequeue()
{

head++;

return queue[head-1];
}

/*******判断队列是否为空*******/
int is_empty()
{

return head==tail;

}

/*******访问节点*******/
void visit(int row,int col,int maze[41][41])
{

struct point visit_point={row,col,head-1};
maze[row][col]=2;

enqueue(visit_point);

}

/*******探索迷宫路径*******/

int mgpath(int maze[41][41],int m,int n)
{

int X=1;

struct point p={1,1,-1};

if(maze[p.row][p.col]==1)
{

printf("\n===============================================\n");

printf("此迷宫无解\n\n");
X=0;
return 0;
}

maze[p.row][p.col]=2;

enqueue(p);

while(!is_empty())
{

p=dequeue();

if((p.row==m)&&(p.col==n))
break;

if((p.col+1 visit(p.row,p.col+1,maze);
if((p.row+1 visit(p.row+1,p.col,maze);
if((p.col-1>=0)&&(maze[p.row][p.col-1]==0)) //左边界
visit(p.row,p.col-1,maze);

if((p.row>=0)&&(maze[p.row-1][p.col]==0)) //上边界
visit(p.row-1,p.col,maze);

}

if(p.row==m-1&&p.col==n-1)
{

printf("\n==================================================================\n");

printf("迷宫路径为:\n");
printf("(%d,%d)\n",p.row,p.col);

maze[p.row][p.col]=3;

while(p.predecessor!=-1)
{

p=queue[p.predecessor];

printf("(%d,%d)\n",p.row,p.col);

maze[p.row][p.col]=3;

}

}

else
{

printf("\n=============================================================\n");

printf("此迷宫无解!\n\n");
X=0;
}

return 0;

}

/******递归函数*******/
int path(int maze[][N+2],Dj move[],int x,int y,int step)
{
int i;
step++;
maze[x][y]=step;
step++;
maze[x][y]=step;
if(x==M&&y==N)
return 1;
for(i=0;i<4;i++)
{
if(maze[x+move[i].x][y+move[i].y]==0)
if(path(maze,move,x+move[i].x,y+move[i].y,step))
return 1;
}
step--;
maze[x][y]=0;
return 0;
}

/********主函数********/
void main(void)

{

Dj move[4];
int maze[N+2][M+2];
int i,h,m,n,cycle=0;

while(cycle!=(-1))
{

printf("********************************************************************************\n");

printf(" 欢迎进入迷宫求解系统\n");

printf("********************************************************************************\n");

printf(" →_→ 手动生成迷宫 请按:1\n");

printf(" →_→ 自动生成迷宫 请按:2\n");

printf(" →_→ 退出 请按:3\n\n");

printf("********************************************************************************\n");
printf("\n");

printf("请选择你的操作:\n");

scanf("%d",&i);

switch(i)
{

case 1:/*printf("\n请输入行数:");

scanf("%d",&m);

printf("\n");

printf("请输入列数:");
scanf("%d",&n);

while((m<=0||m>39)||(n<=0||n>39))
{

printf("\n抱歉,你输入的行列数超出预设范围(0-39,0-39),请重新输入:\n\n");

printf("请输入行数:");
scanf("%d",&m);

printf("\n");

printf("请输入列数:");
scanf("%d",&n);
} /
printf("
*******************************************************************************\n");

printf(" →_→ 递归算法 请按:1\n");

printf(" →_→ 非递归算法 请按:2\n");

printf(" →_→ 退出 请按:3\n\n");

printf("********************************************************************************\n");
printf("\n");

printf("请选择你的操作:\n");

scanf("%d",&h);
if(h==1)
{
printf("\n请输入行数:");

scanf("%d",&m);

printf("\n");

printf("请输入列数:");
scanf("%d",&n);

while((m<=0||m>39)||(n<=0||n>39))
{

printf("\n抱歉,你输入的行列数超出预设范围(0-39,0-39),请重新输入:\n\n");

printf("请输入行数:");
scanf("%d",&m);

printf("\n");

printf("请输入列数:");
scanf("%d",&n);
}
path(maze,move,0,0,0);
shoudong_maze(m,n);

print_maze(m,n);

mgpath(maze,m,n);

if(X!=0)
result_maze(m,n);

printf("\n\nPress Enter Contiue!\n");

getchar();

while(getchar()!='\n');break;
}
else
{
shoudong_maze(m,n);

print_maze(m,n);

mgpath(maze,m,n);

if(X!=0)
result_maze(m,n);

printf("\n\nPress Enter Contiue!\n");

getchar();

while(getchar()!='\n');break;
}

    case 2:printf("\n请输入行数:");      
        scanf("%d",&m);     
        printf("\n");      
        printf("请输入列数:");     
        scanf("%d",&n);      
        while((m<=0||m>39)||(n<=0||n>39))
        {      
            printf("\n抱歉,你输入的行列数超出预设范围(0-39,0-39),请重新输入:\n\n");       
            printf("请输入行数:");      
            scanf("%d",&m);      
            printf("\n");       
            printf("请输入列数:");           
            scanf("%d",&n);
        }
        zidong_maze(m,n);     
        print_maze(m,n);     
        mgpath(maze,m,n);     
        if(X!=0) 
            result_maze(m,n);     
        printf("\n\nPress Enter Contiue!\n");     
        getchar();      
        while(getchar()!='\n');      
        break;     
    case 3:cycle=(-1);
        break;     
    default:printf("\n");
        printf("你的输入有误!\n");     
        printf("\nPress Enter Contiue!\n");     
        getchar();      
        while(getchar()!='\n');     
        break; 
} 

}

}

2个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
递归问题:递归引用传递的问题

最近在学递归有两个问题困扰了我很久, 问题:递归引用传递的问题 贴个代码说事 ``` public static List<List<Integer>> threeSum(int[] nums,int counter,List<List<Integer>> results,List<Integer> result) { //递归 } ``` 就拿这个做例子,我发现比如说数组原始内容是{-1, 0, 1, 2, -1, -4},递归做的是找出三个元素使得a+b+c=0,比如说我在里面有循环,当我从第三次次递归回调到第二次递归时,数组里的变量也会回退到第二次的情况,但是为什么List列表不会回退到第二次呢,而是不管递归了多少次他都会一直往下记录?

C语言二叉树非递归遍历问题

#include"stdio.h" #include"stdlib.h" #define OK 1 #define ERROR 0 #define OVERFLOW -1 typedef char TElemType; typedef struct BiTNode{ TElemType data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; typedef int Status; typedef struct LNode{ BiTree data; struct LNode *next; }LNode; typedef struct{ LNode *top; }LStack; int main(){ Status CreateBiTree(BiTree &T); Status Pop(LStack &S); Status Init_Stack(LStack &S); Status Push(LStack &S,BiTree T); Status StackEmpty(LStack S); Status PreOrderTraverse(BiTree T); void visit(TElemType data); BiTree T; printf("创建树中..."); if(CreateBiTree(T)) printf("创建成功\n"); PreOrderTraverse(T); return 0; } Status CreateBiTree(BiTree &T){ TElemType ch; scanf("%c",&ch); if(ch==' ') T=NULL; else{ T=(BiTNode *)malloc(sizeof(BiTNode)); if(!T) exit(OVERFLOW); T->data = ch; CreateBiTree(T->lchild); CreateBiTree(T->rchild); } return OK; } Status Init_Stack(LStack &S){ LNode *p; p=(LNode *)malloc(sizeof(LNode)); if(!p) exit(OVERFLOW); p->next=NULL; S.top=p; return OK; } Status Push(LStack &S,BiTree T){ LNode *p; p=(LNode *)malloc(sizeof(LNode)); if(!p) exit(OVERFLOW); S.top->data = T; p->next = S.top; S.top = p; return OK; } Status StackEmpty(LStack S){ if(S.top==NULL) return 1; else return 0; } void visit(TElemType data){ printf("%c\n",data); } BiTree Pop(LStack &S){ BiTree tran; LNode *t; tran=S.top->data; t=S.top; S.top=S.top->next; free(t); return tran; } Status PreOrderTraverse(BiTree T){ LStack S; Init_Stack(S); BiTree p; p=T; while(p||!(StackEmpty(S))){ if(p){ Push(S,p); p=p->lchild; } else{ p=Pop(S); visit(p->data); p=p->rchild; } } return OK; } //源代码如上,程序运行,我输入ABC DE G F 建立二叉树那一段可以运行,到了二叉树遍历的时候程序无法运行自动关闭,麻烦各位了!

c语言迷宫问题怎么解??

系统给出一个12×12的迷宫,编写一个递归函数来穿越迷宫,使用一个简单的算法,即将右手放在墙上,然后开始前进,最终必然会找到出口。 请编写递归函数来穿越迷宫,这个函数将接受一个表示迷宫的12×12的数组作为实参,由于该函数在迷宫中试图找到出口,所以函数将字符放在行走路线经过的空格上每次移动后,函数将显示迷宫的状态。 用#表示墙,用。表示路。 急求!!!有大佬能给一下函数的代码吗???实在不知道怎么写了,救救孩子!!!

数据结构C++语言解决迷宫问题

标题: 迷宫问题 时 限: 100000 ms 内存限制: 100000 K 总时限: 3000 ms 描述: 迷宫问题 迷宫是一个二维矩阵,其中1为墙,0为路,3为入口,4为出口.要求从入口开始,从出口结束,按照 下,左,上,右 的顺序来搜索路径. 输入: 迷宫宽度w 迷宫高度h 迷宫第一行 迷宫第二行 ... 迷宫第h 行 输出: 入口横坐标1 入口纵坐标1 横坐标2 纵坐标2 横坐标3 纵坐标3 横坐标4 纵坐标4 ... 横坐标n-1 纵坐标n-1 出口横坐标n 出口纵坐标n 输入样例: 8 10 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 1 0 1 0 0 1 0 1 1 1 0 3 1 0 1 1 1 0 0 1 0 0 4 1 1 0 0 0 0 1 1 1 1 0 1 0 0 1 0 1 1 0 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 输出样例: 3 3 2 3 2 4 2 5 3 5 3 6 3 7 4 7 4 6 4 5 4 4 5 4 6 4

C++算法:通过递归算法实现非零数字反转

事例: 321------123 1568-----8651

课后思考题1:C语言用递归算法,计算x的y次方,其中y是正整数

课后思考题1:C语言用递归算法,计算x的y次方,其中y是正整数

课后思考题2:C语言用递归算法,将一个字符串逆序输出,提示:字符串以'\0'结尾。

课后思考题2:C语言用递归算法,将一个字符串逆序输出,提示:字符串以'\0'结尾。

C语言怎么用递归求组合数

求大神指导啊,递归基本思想了解,但是不知道怎么去表达,要求用公式C(n,r)=C(n,r-1)*(n-r+1)/r

python:用递归方法编写二分法查找函数 程序报错

在python上用递归方法编写二分法查找函数 程序如下: ``` def find_loc(x,arr): end = len(arr)-1 mid = end//2 if len(arr) < 1: x_loc = 0 print("None") elif len(arr) > 1: if x < arr[mid]: b = arr[:mid] x_loc = find_loc(x,b) elif x > arr[mid]: b = arr[mid:] x_loc = mid + find_loc(x,b) elif x == arr[mid]: x_loc = mid+1 return x_loc a=[1,2,3,4,5,6,7] print(find_loc(1,a)) ``` 报错如下: Traceback (most recent call last): File "binary_search2.py", line 19, in <module> print(find_loc(1,a)) File "binary_search2.py", line 10, in find_loc x_loc = find_loc(x,b) File "binary_search2.py", line 10, in find_loc x_loc = find_loc(x,b) File "binary_search2.py", line 16, in find_loc return x_loc UnboundLocalError: local variable 'x_loc' referenced before assignment 求助:为什么会出现local variable 'x_loc' referenced before assignment

斐波那契数列的递归和非递归法两种表示方法能解释一下是为什么呢?

非递归法 unsigned long long Fibonacci(unsigned long long n) { int n1, n2, temp, i; if (n > 2) for (n1 = 1, n2 = 1, i = 3; i <= n; i++) { temp = n1 + n2; n1 = n2; n2 = temp; } else n2 = 1; return n2; } 递归法 unsigned long long Fibonacci(unsigned long long n) { if(n > 2) return Fibonacci(n - 1) + Fibonacci(n - 2); else return 1; }

关于C语言中的递归与变量作用域问题

//递归法逆序输出字符串 #include<stdio.h> void reverse(char *sptr); void main() { char s[80]; printf("Enter a line of text:\n"); gets(s); printf("\nThe line printed backward is:\n"); reverse(s); printf("\n"); } void reverse(char *sptr) { if(*sptr=='\0') { return; } else { reverse(++sptr); putchar(*sptr); } } 最后两行中: reverse(++sptr); /这个++sptr使下面的putchar(*sptr)中的sptr地址也加了1是为什么 putchar(*sptr);

迷宫求解 递归方法 求助大牛帮忙解答疑问

//此题目是迷宫求解问题,起点是[0][0]位置,要到达的位置是[N-1][N-1] //traverse()此函数为什么就能完成了迷宫求解问题呢? //maze_ret[i][j] = maze[i][j]; 此语句具体含义是什么? //maze_ret[11][11];此数组的具体用处是什么? //我认为函数会把所有的为0的数据全部置为3,但是为什么没有呢? #include <stdio.h> int N; int maze[11][11]; int maze_ret[11][11]; void traverse(int, int); int main(void) { int tc, T, i, j; freopen("input.txt", "r", stdin); setbuf(stdout, NULL); scanf("%d", &T); for (tc = 0; tc < T; tc++) { scanf("%d", &N); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { scanf("%d", &maze[i][j]); } } traverse(0, 0); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { printf("%d ", maze_ret[i][j]); } printf("\n"); } printf("\n\n"); } return 0; } void traverse(int x, int y) { int i, j; maze[x][y] = 3; if (x == N - 1 && y == N - 1) { for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { maze_ret[i][j] = maze[i][j]; } } } if ((y < N - 1) && (maze[x][y + 1] == 0)) traverse(x, y + 1); if ((x < N - 1) && (maze[x + 1][y] == 0)) traverse(x + 1, y); if ((y >= 1) && (maze[x][y - 1] == 0)) traverse(x, y - 1); if ((x >= 1) && (maze[x - 1][y] == 0)) traverse(x - 1, y); }

求一个代码c语言实现图的深度遍历(递归)、非递归算法以及实现图的广度遍历(队列)

求一个代码c语言实现图的深度遍历(递归)、非递归算法以及实现图的广度遍历(队列)

求二分查找的递归和非递归的时间空间效率比较

求二分查找的递归和非递归的时间空间效率比较,为什么在刘汝佳的书上说,一般用非递归方法

python分别用递归函数和非递归函数的形式实现:输入两个1至10000之间的正整数,输出这两个数之间的所有Fibonacci数列?

分别用递归函数和非递归函数的形式实现:输入两个1至10000之间的正整数,输出这两个数之间的所有Fibonacci数列?

关于C语言的一道递归题

![图片说明](https://img-ask.csdn.net/upload/201812/03/1543846944_291254.png) 如图,程序要求使用递归算法将组合数的各种可能性按照格式输出,目前我已经做到了这一步: ![图片说明](https://img-ask.csdn.net/upload/201812/03/1543847036_813687.png) 以下为源代码: 请问如何才能按照格式输出,也就是将每一行都右对齐呢? ``` #include "stdafx.h" void combinations(int n,int r,int i) { static int n0=n,r0=r; int i1; for(i1=i;i1<=n0-r+1;i1++){ printf("%d ",i1); if(r-1>0) combinations(n-1,r-1,i1+1); else printf("\n"); } } int _tmain(int argc, _TCHAR* argv[]) { int n,r,i=1; printf("ENTER N R:"); scanf_s("%d%d",&n,&r); printf("combinations:\n"); combinations(n,r,i); return 0; } ```

二叉树非递归前序遍历

实在看不出来有啥毛病了,请各位大佬帮忙看一下! ![图片说明](https://img-ask.csdn.net/upload/201911/26/1574755713_869436.png) ``` #include "stdafx.h" #include <stdlib.h> #include <iostream> using namespace std; #define N 100 extern char *a; /*存放扩充二叉树的前序序列*/ char *a="ABC##D#E##F##"; /*扩充二叉树序树t的前序序列*/ typedef struct node /*二叉树结构定义*/ { char data; struct node *lchild,*rchild; }binnode; typedef binnode *bintree; /*函数creatbintree (根据扩充二叉树的前序序列(字符串a)建立二叉树t的存储结构*/ bintree creatbintree() { char ch=*a++; bintree t; if (ch=='#') t=NULL; else { t=(bintree)malloc(sizeof(binnode)); t->data=ch; t->lchild=creatbintree(); t->rchild=creatbintree(); } return t; } void preorder(bintree t) /*前序递归遍历二叉树*/ { if (t) { printf("%c",t->data); preorder(t->lchild); preorder(t->rchild); } } void postorder(bintree t) /*后序递归遍历二叉树*/ { if (t) { postorder(t->lchild); postorder(t->rchild); printf("%c",t->data); } } /*顺序栈定义*/ typedef struct { bintree data[N]; int top; int tag[N]; }seqstack; void init(seqstack *s) /*初始化空栈*/ { s->top=-1; } int empty(seqstack *s) /*判断栈是否为空*/ { if (s->top>-1) return 0; else return 1; } int full(seqstack *s) /*判断栈是否为满*/ { if (s->top==N-1) return 1; else return 0; } void push(seqstack *s ,bintree x) /*进栈*/ { if (!full(s)) s->data[++s->top]=x; } bintree pop(seqstack *s) /*出栈*/ { if (!empty(s)) return s->data[s->top--]; } bintree top(seqstack *s) { if(empty(s)) return s->data[s->top]; } /*函数preorder1()的功能是非递归前序遍历二叉树t*/ void preorder1(bintree t) { seqstack *s; init(s); bintree p=t; while(!empty(s)||p) { if(p) { cout<<p->data; push(s,p); p=p->lchild; } else { p=top(s); pop(s); p=p->rchild; } } cout<<endl; } int _tmain(int argc, _TCHAR* argv[]) { bintree t; t=creatbintree(); /*建立二叉树t的存储结构*/ printf("二叉树的前序序列为:\n"); preorder1(t); /*前序非递归遍历二叉树*/ return 0; } ```

递归调用循环的非递归形式

背景:之前在算法书上看到说所有的递归算法都可以写成非递归的形式。 那么遍历一个完全树的所有叶子节点,我看过两个算法,一个是递归调用,非常简单。 还有一个使用了队列:(c++ 和伪代码的混合表示) queue.push(root);//根节点进队 while (!queue.isEmpty()) { queue.push(root->left); queue.push(root->right); if (!queue.top()->hasChild()) { print queue.top()->data; } queue.pop(); } 上面的算是非递归形式。 不过我想问的是,是不是说一定需要队列或者堆栈这样的辅助数据结构才能解决该问题? 因为我觉得之前的一些递归算法改成的非递归算法都没有用到什么数据结构。 比如合并排序的非递归形式。用到的仅仅是两个向量而已。 我一直认为递归算法改成非递归形式是有一定的模板可循的。如果辅助数据结构不可避免,是不是意味着所有的递归算法只是理论上可以写成递归形式,至于写不写的出来,还要看个人的数据结构水平?

用C语言递归实现因数分解,不得使用循环

用C语言递归实现因数分解,比如54=3*3*3*2,不得使用循环

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

springboot+jwt实现token登陆权限认证

一 前言 此篇文章的内容也是学习不久,终于到周末有时间码一篇文章分享知识追寻者的粉丝们,学完本篇文章,读者将对token类的登陆认证流程有个全面的了解,可以动态搭建自己的登陆认证过程;对小项目而已是个轻量级的认证机制,符合开发需求;更多精彩原创内容关注公主号知识追寻者,读者的肯定,就是对作者的创作的最大支持; 二 jwt实现登陆认证流程 用户使用账号和面发出post请求 服务器接受到请求后使用私...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

程序员写出这样的代码,能不挨骂吗?

当你换槽填坑时,面对一个新的环境。能够快速熟练,上手实现业务需求是关键。但是,哪些因素会影响你快速上手呢?是原有代码写的不够好?还是注释写的不够好?昨夜...

外包程序员的幸福生活

今天给你们讲述一个外包程序员的幸福生活。男主是Z哥,不是在外包公司上班的那种,是一名自由职业者,接外包项目自己干。接下来讲的都是真人真事。 先给大家介绍一下男主,Z哥,老程序员,是我十多年前的老同事,技术大牛,当过CTO,也创过业。因为我俩都爱好喝酒、踢球,再加上住的距离不算远,所以一直也断断续续的联系着,我对Z哥的状况也有大概了解。 Z哥几年前创业失败,后来他开始干起了外包,利用自己的技术能...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

早上躺尸,晚上干活:硅谷科技公司这么流行迟到?

硅谷科技公司上班时间OPEN早已不是什么新鲜事,早九晚五是常态,但有很多企业由于不打卡,员工们10点、11点才“姗姗来迟”的情况也屡见不鲜。 这种灵活的考勤制度为人羡慕,甚至近年来,国内某些互联网企业也纷纷效仿。不过,硅谷普遍弹性的上班制度是怎么由来的呢?这种“流行性迟到”真的有那么轻松、悠哉吗? 《动态规划专题班》 课程试听内容: 动态规划的解题要领 动态规划三大类 求最值/计数/可行性 常...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

Python爬虫,高清美图我全都要(彼岸桌面壁纸)

爬取彼岸桌面网站较为简单,用到了requests、lxml、Beautiful Soup4

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

前几天我们公司做了一件蠢事,非常非常愚蠢的事情。我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿。 但是,天有不测风云,公司技术总监、人事总监两位大佬突然降临到我们事业线,叫上我老大,给我们组织了一场别开生面的“考试”。 那是一个风和日丽的下午,我翘着二郎腿,左手端着一杯卡布奇诺,右手抓着我的罗技鼠标,滚动着轮轴,穿梭在头条热点之间。 “淡黄的长裙~蓬松的头发...

大胆预测下未来5年的Web开发

在2019年的ReactiveConf 上,《Elm in Action》的作者Richard Feldman对未来5年Web开发的发展做了预测,很有意思,分享给大家。如果你有机会从头...

立即提问
相关内容推荐