C#递归问题:如何将输出末尾的0修改为1
C#递归输出指定序列问题修正
需要输出的目标序列:1 2 3 4 5 @ 10 8 6 4 2 1,当前代码输出末尾为0,需修正为1。原代码如下:
public static void Recursive(int a, int b) { if (a > b) { Console.WriteLine("@"); Console.WriteLine(a * 2 - 2); } else { Console.WriteLine(a); Recursive(a + 1, b); Console.WriteLine(a*2-2); } }
问题原因
递归回溯到a=1时,执行a*2-2得到0,不符合目标序列的最后一位1。
修正方案
在输出回溯值时,判断当前a是否为1,若是则直接输出1,否则按原逻辑计算:
public static void Recursive(int a, int b) { if (a > b) { Console.WriteLine("@"); Console.WriteLine(a * 2 - 2); } else { Console.WriteLine(a); Recursive(a + 1, b); // 针对a=1的情况单独处理,输出1而非计算值 Console.WriteLine(a == 1 ? 1 : a * 2 - 2); } }
说明
- 当
a > b时,a的值为6,6*2-2=10,符合目标序列的第一个回溯值; - 回溯过程中,
a=5输出8、a=4输出6、a=3输出4、a=2输出2,均符合要求; - 当
a=1时,直接输出1,修正了原代码的0值问题。
内容的提问来源于stack exchange,提问作者Xacoio
相关产品推荐
相关产品推荐

