我做了这个编码,但我无法完成。这个想法应该输入数字,并且在屏幕上必须单独显示。例)如果我们输入:1234结果:1 2 3 4.
#include<stdio.h>
int show_digit(int x);
int main(void)
{
int x;
printf("Enter the variable:");
scanf("%d", &x);
printf("%d ", show_digit(x));
return 0;
}
int show_digit(int x)
{
return show_digit(x / 10)%10;
}
答案 0 :(得分:2)
你似乎试图让func nextPosition() -> [CGPoint] {
// Make a separate array for each group of points in each direction
let down1 = [p1, p2]
let down2 = [p3, p4, p5]
let left1 = [p6, p7]
let left2 = [p8, p9, p10]
let left3 = [p11, p12, p13]
let up1 = [p14, p15]
let up2 = [p16, p17]
let up3 = [p18, p19]
let right1 = [p20, p21]
let right2 = [p22, p23]
let right3 = [p24, p25]
let right4 = [p26, p27, p28, p29, p30]
// Make separate arrays for each direction which contains the previous arrays
let dArray = [down1, down2]
let lArray = [left1, left2, left3]
let uArray = [up1, up2, up3]
let rArray = [right1, right2, right3, right4]
// Make an array to group all the directions
let array = [dArray, lArray, uArray, rArray]
var nextPositions = [CGPoint]()
// loop through dArray, lArray etc.
for arr in array {
// pick random direction array
var length = UInt32(arr.count)
let random = Int(arc4random_uniform(length))
// pick random point from sub array
length = UInt32(arr[random].count)
let random2 = Int(arc4random_uniform(length))
// print final random point
print(arr[random][random2])
nextPositions.append(arr[random][random2])
}
return nextPositions
}
递归,但是你仍然坚持如何实际做到这一点。这个重构版本的函数实际上从输入的 last 数字遍历 first (这是基本情况),然后开始打印出间隔数字走出递归。请注意,我将show_digit()
的返回类型更改为show_digits()
,因为它现在实际上是一个不计算任何内容的实用函数。
void
答案 1 :(得分:0)
在这个答案中,我不会向您显示任何代码,但我会解释您的问题。
我尝试编译你的代码,它编译成功,但是当我运行它时,程序崩溃了,这是你的问题吗?
我知道你的程序崩溃的原因:内存不足!
它是如何发生的?
你的函数int show_digit(int)
是一个递归函数,在这个函数中,你没有做一个语句来停止递归,所以,递归将继续,直到函数的堆栈达到最大值允许记忆,然后它最终导致崩溃。
答案 2 :(得分:-1)
非递归版:
int digits[256];
int i = 0;
do {
digits[i++]=x%10;
x /= 10;
} while (x);
for (i=i-1; i>=0; i--) {
printf ("%d ", digits[i]);
}
对于正整数,它可以正常工作。