最近看到了本資料結構的書有個範例:魔術方陣,在某格放1,然後往左上移動,以遞增的順序將數值放入格子,格子像卡諾圖一樣上下左右相連,如果已經有數值就往下移動並填入數值。
書上範例用for迴圈,我想說用遞迴的方式,我的程式碼:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int size;
int recursion(int [][size],int,int,int,int);
int main()
{
int i,j,row,col,count;
printf("Enter the size of the square:");
scanf("%d",&size);
if(size == 5 || size == 7 || size == 9)
{
int arr[size][size];
for(i = 0 ; i < size ; i ++)
{
for(j = 0 ; j < size ; j++)
{
arr[i][j] = 0;
}
}
srand(time(NULL));
i = rand() % size;
j = rand() % size;
arr[i][j] = 1;
recursion(arr[size][size],size*size,i,j,2);
for(i = 0 ; i < size ; i ++)
{
for(j = 0 ; j < size ; j++)
{
printf("%2d ",arr[i][j]);
}
printf("\n");
}
}
return 0;
}
int recursion(int arr[][size],int num,int i,int j,int count)
{
int row,col;
if(count <= num)
{
row = (i - 1 < 0) ? (size - 1) : (i - 1);
col = (j - 1 < 0) ? (size - 1) : (j - 1);
if(arr[row][col] != 0)
{
i = (++i) % size;
}
else
{
i = row;
j = col;
}
arr[i][j] = count;
return recursion(arr[size][size],num-1,i,j,count++);
}
}
我宣告一個size來輸入方陣大小,如果size是5、7、9,就執行否則離開,數字1用亂數找一個格子隨機放入,其餘的要用遞迴,但無法執行,不知是我的recursion函式有問題,還是二維陣列傳遞有問題?