社区
C#
帖子详情
为什么输出的只有5
wsxqaz
2005-12-30 06:44:33
下面为什么输出的只有5
private int a(int i)
{
int c=0;
if(i==0)
{
c=0;
return 0;
}
else
{
textbox1.text=textbox1.text+a(i-1));
return i;
}
}
private void b()
{
a(5);
}
...全文
158
17
打赏
收藏
为什么输出的只有5
下面为什么输出的只有5 private int a(int i) { int c=0; if(i==0) { c=0; return 0; } else { textbox1.text=textbox1.text+a(i-1)); return i; } } private void b() { a(5); }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yuanreid
2005-12-31
打赏
举报
回复
看看我的程序,结果还是4
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public int x =0;
private int a(int i)
{
if(i==0)
{
return 0;
}
else
{
x = x + a(i - 1);
return i;
}
}
private void b()
{
a(5);
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
b();
textbox1.Text = x.ToString();
}
}
}
wsxqaz
2005-12-31
打赏
举报
回复
名白了我用Arraylist在每一次递归时Add一个这个时候arraylist里到是有各个值的
止戈而立
2005-12-31
打赏
举报
回复
当你执行a(5)的时候。。
那么:
textbox1.text=textbox1.text+a(i-1);实际上就是:
textbox1.text=textbox1.text+a(4);现在不知道你看懂了没有?无论你在计算a(4)的过程中,i怎么变。最终要 求的是a(4)的值。。
对比一下上面的朋友给你改后的代码吧:
winterice(冬天的冰)
else
{
textbox1.text=textbox1.text+a(i-1));
return i;
}
改成:
else
{
int d=a(i-1);
textbox1.text=textbox1.text+d;//
return i;
}
就输出“01234”了
wsxqaz
2005-12-31
打赏
举报
回复
我没有看懂为什么textbox1.text=textbox1.text+a(i-1)等于textbox1.text=a(i-1),虽然a(i)反回的是一个整型,但是textbox却可以保存字符,而且textbox在每一次帝归的时候都被付过值了,但是在下一次的时候textbox又恢复原来的值了
止戈而立
2005-12-31
打赏
举报
回复
我说过了:textbox1.text=textbox1.text+a(i-1);这一句相当于textbox1.text=a(i-1);
随着i的变化,a(i-1)的值当然会跟着变了。。
wsxqaz
2005-12-31
打赏
举报
回复
我跟了一下发现,每一次递归调用以后,textbox1.text里的值都在变,也就是textbox1.text=a(i-1)的值,比如i=1时textbox1.text=1(textbox.text确实被付值了)但是这个值并没有被保存下去,在跳到下一个递归的地方时值并没有相加,而是从新给textbox付值了,大家跟跟看,每一次递归调用以后好象textbox里是用值的
止戈而立
2005-12-31
打赏
举报
回复
另外提一句:
textbox1.text的结果为什么只输出了一个4。。而没有在多次执行该行代码后获得很多的值。。
这是因为
a(i-1)只返回最终的一个值。。放在哪里它都返回一个整型值。。不会有其它。。
因此textbox1.text如果原本是空字符串,那么textbox1.text=textbox1.text+a(i-1);这一句相当于textbox1.text=a(i-1);
dwp008
2005-12-31
打赏
举报
回复
min_jie(止戈)
调试了一下,终于看明白了。。
首先i的值从5一步步自减到0,算出了a(0)的值。。
然后又从0一步步自增到5,算出a(5)的值。。。
大家可以自己调试看看。。
这个是正解
递归都这样啊
winterice(冬天的冰) 说的方法正好可以反映出最后递归的顺序
止戈而立
2005-12-31
打赏
举报
回复
帮你分析一下代码:
private int a(int i)
{
int c=0;//这个变量没意义
if(i==0)
{
c=0;//没意义
return 0;//这表示a(0)=0
}
else
{
textbox1.text=textbox1.text+a(i-1);//这一句跟返回值没什么关系,也可暂时不看
return i;//这个表示a(i)=i,不要受上一句的影响,返回值跟上一句无关。a(5)当然等于5
}
}
当然,textbox1.text最后的值是4。因为a(i-1)=a(4)=4
止戈而立
2005-12-31
打赏
举报
回复
调试了一下,终于看明白了。。
首先i的值从5一步步自减到0,算出了a(0)的值。。
然后又从0一步步自增到5,算出a(5)的值。。。
大家可以自己调试看看。。
winterice
2005-12-31
打赏
举报
回复
应该输出4,把那代码
else
{
textbox1.text=textbox1.text+a(i-1));
return i;
}
改成:
else
{
int d=a(i-1);
textbox1.text=textbox1.text+d
return i;
}
就输出“01234”了
wsxqaz
2005-12-30
打赏
举报
回复
应该是4
我不管是字符连接还是相加反正都不应该输出一个数啊
就算是字符连接也应该是123……
net_explorer
2005-12-30
打赏
举报
回复
问题在于他用的是字符型的和整形的相加了.这样的话,就是字符串之间的连接了.
yuanreid
2005-12-30
打赏
举报
回复
to ChengKing(Enthusiasm Bigrosoft)
你运行试试吧
yuanreid
2005-12-30
打赏
举报
回复
用C++试了试,结果是对的返回10。即 0+1+2+3+4 = 10
而用C#跟踪了一下,发现是 0+1+1+1+1 = 4
确实不解。
ChengKing
2005-12-30
打赏
举报
回复
a()方法第一次执行的时候,这句: return i; 就执行了,且返回了:5
中间虽然进行了许多递归调用,但根本不影响最终结果: 5
yuanreid
2005-12-30
打赏
举报
回复
我输出的是4
Ps教程之神奇的Photoshop自动化技术
【为什么购买本课程?】 1、学会Photoshop脚本,可以大幅提高您的工作效率、摆脱大量重复设计任务的束缚; 2、扩展Photoshop的功能:天气预报、to-do设计任务管理、中文加拼音、图层文字中英互译、每日一句英语、...
(转)定义数据类型为double,
输出
时也是double型
输出
,为什么小数点后位数只有六位?
定义数据类型为double,
输出
时也是double型
输出
,为什么小数点后位数只有六位?
定义数据类型为double,
输出
时也是double型
输出
,为什么小数点后位数只有六位?
因为C标准规定的是double...编译器是默认
输出
浮点数小数点后6位,这两个不冲突。 当然如果你需要显示小数点后更多位数字,可以这么写printf("%.nf",a);n是多少就
输出
几位小数
输出
float类型数值同理。 ...
tensorflow softmax
输出
只有0或1
原 tensorflow softmax
输出
只有0或1 2017年12月07日 11:21:52 HaHa_33 阅读数:1658 softm...
C++
输出
位数只有六位
问题综述 比如一个数据 ...所以需要指定精度,如果习惯使用c的
输出
,可以在printf中使用%lf
输出
。 解决方法 设置精度方法 cout << setprecision(n) << i<...
C#
110,538
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章