※ [本文转录自 b97902HW 看板]
作者: silentvow (沉没) 看板: b97902HW
标题: [计程] 递回的常见错误
时间: Mon Oct 13 23:25:34 2008
这是一份简单合法并使用递回的程式码,以下是常见的错误情况。
#include <stdio.h>
int func(int a){
if(a==0)
return 0;
return func(a-1) + 1;
}
void main(){
int n;
scanf("%d", &n);
printf("%d\n", func(n));
} 前面的,小抄传过来
● (振笔疾书) \
║\ ◥ ● ● ● ●
▆\\ ︻︶ ║ ︻︶ ║ ︻︶ ║ ︻︶ ║
H//▆ H//▆ H//▆ H//▆
1. 没有回传值
#include <stdio.h>
int func(int a){
if(a==0)
return 0;
func(a-1) + 1;
}
void main(){
int n;
scanf("%d", &n);
printf("%d\n", func(n));
}
居然给我白纸 ...
● \
║\ ◥ ● ● ● ●
▆\\ ︻︶ ║ ︻︶ ║ ︻︶ ║ ︻︶ ║
H//▆ H//▆ H//▆ H//▆
2. 没有基底或结束条件
#include <stdio.h>
int func(int a){
return func(a-1) + 1;
}
void main(){
int n;
scanf("%d", &n);
printf("%d\n", func(n));
}
干没带啦 前面的不借我就举发你
● / \
║\ ◥ ● ● ● ●
▆\\ ︻︶ ║ ︻︶ ║ ︻︶ ║ ︻︶ ║
H//▆ H//▆ H//▆ H//▆
3. 递回传入值错误
#include <stdio.h>
int func(int a){
if(a==0)
return 0;
return func(a+1) + 1;
}
void main(){
int n;
scanf("%d", &n);
printf("%d\n", func(n));
}
拎北是墙壁啦
\
后面的,小抄传过来 |
● \ |
║\ ◥ ● ● ● ● |
▆\\ ︻︶ ║ ︻︶ ║ ︻︶ ║ ︻︶ ║ |
H//▆ H//▆ H//▆ H//▆ |
4. 使用在不同函式内宣告的变量
#include <stdio.h>
int func(int a){
if(a==0)
return 0;
return func(n-1) + 1;
}
void main(){
int n;
scanf("%d", &n);
printf("%d\n", func(n));
}
这小抄是用哪国语言写的 ...
● \
║\ ◥ ● ● ● ●
▆\\ ︻︶ ║ ︻︶ ║ ︻︶ ║ ︻︶ ║
H//▆ H//▆ H//▆ H//▆
5. 宣告和全域变量相同名称的变量
#include <stdio.h>
int a;
int func(int a){
if(a==0)
return 0;
return func(a-1) + 1;
}
void main(){
int n;
scanf("%d", &n);
printf("%d\n", func(n));
}
怎么有笔迹不一致的两种答案?!
● \
║\ ◥ ● ● ● ●
▆\\ ︻︶ ║ ︻︶ ║ ︻︶ ║ ︻︶ ║
H//▆ H//▆ H//▆ H//▆
6. 基底不正确
#include <stdio.h>
int func(int a){
if(a==0)
return -1;
return func(a-1) + 1;
}
void main(){
int n;
scanf("%d", &n);
printf("%d\n", func(n));
}
真蠢,没发现那是上一章的小抄
● / (埋头狂写)
║\ ◥ ● ● ● ●
▆\\ ︻︶ ║ ︻︶ ║ ︻︶ ║ ︻︶ ║
H//▆ H//▆ H//▆ H//▆
7. 溢位
#include <stdio.h>
int func(int a){
if(a==0)
return 0;
return func(a-1) + 1;
}
void main(){
printf("%d\n", func(2147483647));
}
屁啦 ... 哪来这么多人
\
● ● ● ● ● ● ● ● ● ●
︻︶ ║︻︶ ║︻︶ ║︻︶ ║︻︶ ║︻︶ ║︻︶ ║︻︶ ║︻︶ ║︻︶ ║
H//▆ H//▆ H//▆ H//▆ H//▆ H//▆ H//▆ H//▆ H//▆ H//▆
写程式码出错是常有的事,找出并修正它才会有所成长。
现在放弃的话,比赛就结束了。